实体框架选择仅排除一个子项的人员

本文关键字:一个 选择 框架 排除 实体 | 更新日期: 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()