Получить случайные объекты (включая детей), используя Guid.NewGuid () в .Net Core 2 - PullRequest
1 голос
/ 30 апреля 2019

Мне нужно получить несколько случайных объектов из базы данных, используя EF Core, включая некоторые дочерние объекты. Сначала я использовал этот пример:

var entities = await context.Entities
    .Include(p => p.Children1)
    .Include(p => p.Children2)
    .Include(p => p.Children3)
    .OrderBy(p => Guid.NewGuid())
    .Take(4)
    .ToListAsync();

Проблема в том, что Guid.NewGuid () возвращает дочерние элементы случайным образом и назначается не только для основных объектов. Итак, иногда я получаю Children1, иногда нет, и мне нужно применить этот случайный опрос только для основного.

Я нахожу решение, но думаю, что оно не самое лучшее. Мне нужно знать, существует ли лучшее решение. Сначала я получаю идентификаторы для некоторых случайных основных сущностей, затем я получаю все их сущности, включая детей (это плохо, потому что я делаю 2 запроса в базу данных):

var ids = context.Entities
    .OrderBy(p => Guid.NewGuid())
    .Take(4)
    .ToListAsync();

var entities = context.Entities
    .Include(p => p.Children1)
    .Include(p => p.Children2)
    .Include(p => p.Children3)
    .Where(p => ids.Contains(p.Id)
    .ToListAsync();
...