实体框架选择仅包含一个孩子的人
Posted
技术标签:
【中文标题】实体框架选择仅包含一个孩子的人【英文标题】:entity framework select person with iunclude only one child 【发布时间】:2016-02-22 12:39:00 【问题描述】:假设我有一个包含子列表的 Person 类。
我不想查询数据库以获取包含孩子的人员列表:
return context.Person.Include(p => p.Children);
好的,现在我想修改那个查询,结果我得到了 Person 列表,但只有一个孩子(假设是最老的一个,按年龄 desc 排序)
有可能吗?
提前致谢
【问题讨论】:
检查此答案***.com/a/16501677/2224701,但不要指望通过person.Children
集合获得那个孩子,它将是new person, child
。
【参考方案1】:
您所描述的可以通过这样的查询来实现:
from p in Persons
from ch in p.Children.OrderByDescending(x => x.Age).Take(1)
select new p,ch
您也可以使用FirstOrDefault()
,而不是Take(1)
:结果集也将包括没有孩子的人:
from p in Persons
select new p, p.Children.OrderByDescending(x => x.Age).FirstOrDefault()
但是,Person
类的集合 Children
会自动维护为 1 个 Person
实例的所有 Children
的集合,并且无法更改此含义。
据我所知,这是不可能的,您需要创建一个包含 1 个 Person + 1 个 Child 实例的新类。
【讨论】:
【参考方案2】:我为这种情况创建了一个库。
https://github.com/deyunote/EntityFramework.Include
使用这个库,你可以描述如下
context.Person.Include(p => p.Children,
p => p.Children.OrderByDescending(x => x.Age).Take(1).ToList())
.ToListWithInclude(); //Async:ToListWithAsync()
【讨论】:
以上是关于实体框架选择仅包含一个孩子的人的主要内容,如果未能解决你的问题,请参考以下文章