是否可以限制急切加载Include的关联实体的数量?
e.g。 我有与多对一关系的Author和Book实体 我想加载所有作者和他们的最后一本书
感谢。
答案 0 :(得分:3)
您无法使用.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) Join and .Include conflict
答案 1 :(得分:0)
是的,你可以。你将通过两个查询来完成它。
首先选择你的作者。
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的欢乐魔力。
答案 2 :(得分:0)
我会这样做:
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个元素。