Выборочная нетерпеливая загрузка в Платформе Объекта

Действительно ли возможно ограничить количество связанных объектов, нетерпеливо загруженных, Включают?

например, у Меня есть объекты Автора и Книги с many-one отношением, я хотел бы загрузить всех авторов и их последнюю книгу

Спасибо.

6
задан Ofer 22 March 2010 в 12:20
поделиться

3 ответа

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

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 элемент.

0
ответ дан 17 December 2019 в 18:13
поделиться

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

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

    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.

0
ответ дан 17 December 2019 в 18:13
поделиться

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

3
ответ дан 17 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: