繁体   English   中英

实体框架中的选择性预先加载

[英]Selective eager loading in Entity Framework

是否可以限制急切加载Include的关联实体的数量?

例如,我有一个多边对象的作者和书籍实体,我想加载所有作者和他们的最后一本书

谢谢。

您无法使用.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(实体框架)加入和.Include冲突

是的你可以。 您将通过两个查询来完成它。

首先选择你的作者。

    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的欢乐魔力。

我这样做:

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个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM