Мне нужно получить несколько случайных объектов из базы данных, используя 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();