Выборочная загрузка в Entity Framework - PullRequest
6 голосов
/ 22 марта 2010

Можно ли ограничить количество связанных сущностей, загружаемых с помощью «Включить»?

например, у меня есть сущности «Автор» и «Книга» с отношением «многие к одному», я хочу загрузить всех авторов и их последниекнига

Спасибо.

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

Вы не можете сделать это с помощью синтаксиса .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) Присоединение и конфликт .Include

0 голосов
/ 02 апреля 2010

Я бы сделал это так:

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 for Books, но он должен содержать только 1 элемент.

0 голосов
/ 02 апреля 2010

Да, вы можете.Вы собираетесь сделать это с помощью двух запросов.

Сначала выберите своих авторов.

    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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...