Действительно ли возможно ограничить количество связанных объектов, нетерпеливо загруженных, Включают?
например, у Меня есть объекты Автора и Книги с many-one отношением, я хотел бы загрузить всех авторов и их последнюю книгу
Спасибо.
Я бы сделал это так:
var list = (from a in Authors.Include("Books")
join b in books.OrderByDesc(b => b.PublishedDate).Take(1)
on a.Id equals b.AuthorId into bo
select new { Author = a, Books = b }).ToList();
List<Author> authors = list.Select(o => o.Author);
где Автор - имя вашей сущности, а Книги в Свойстве навигации в Автор. у вас все еще будет EntityCollection для книг, но он должен содержать только 1 элемент.
Да, можно. Вы собираетесь сделать это с помощью двух запросов.
Сначала выберите авторов.
List<Authors> authors = context.Authors.ToList();
Во-вторых, выберите книги.
List<Books> books=
( from b in context.Books
group b by b.AuthorName into groupedByAuthor
let maxDate = groupedByAuthor.Max(c=>c.PublishDate)
...
).ToList
Когда вы сделаете это, EF заполнит вашу книгу для автора. Обратите внимание, что ваша ссылка не будет «загружена», но ваша 1 книга будет там.
Попробуйте ... радостное волшебство EF.
Вы не можете сделать это с помощью синтаксиса .Include, но можете сделать это с помощью проекции.
var list = (from a in data.Authors
select new
{
Author = a,
Books = (from b in a.Books select b).Take(1)
}).ToList();
Когда вы получите результат, материализатор использует исправление отношений, и вы сможете использовать list.Author.Books.
см. Мой вопрос по адресу: LINQ to Entities (Entity Framework) Присоединиться и включить конфликт