实体框架选择仅排除一个子项的人员
本文关键字:一个 选择 框架 排除 实体 | 更新日期: 2023-09-27 18:35:43
假设我有一个包含子列表的Person类。
不是,我想查询数据库以获取包含孩子的人员列表:
return context.Person.Include(p => p.Children);
好的,现在我想修改该查询,以便我得到人员列表,但只有一个孩子(假设按年龄排序的最年长的孩子)
可能吗?
提前致谢
您描述的内容可以通过这样的查询来实现:
from p in Persons
from ch in p.Children.OrderByDescending(x => x.Age).Take(1)
select new { p,ch }
除了Take(1)
,您还可以使用 FirstOrDefault()
:结果集将还包括没有子项的人:
from p in Persons
select new { p, p.Children.OrderByDescending(x => x.Age).FirstOrDefault() }
但是,Person
类的集合Children
自动维护为 1 个Person
实例的所有Children
的集合,并且此含义无法更改。
所以据我所知这是不可能的,你需要创建一个包含 1 个人 + 那 1 个 Child 实例的新类。
我为这样的一些情况创建了一个库。
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()