EF代码优先-如何使用Include扩展方法筛选相关对象

本文关键字:方法 扩展 筛选 对象 Include 何使用 代码 EF | 更新日期: 2023-09-27 18:29:05

给定EF Code First CTP5实体布局,如:

public class Person 
{
     public List<Children> Childrens { get; set; }
}

public class Children
{
    public int Age { get; set; }
}

我想做:

PersonQuery.Include(x => x.Childrens.OrderByDescending(child => child.Age).Take(3))

从名单上只得到3个年龄较大的孩子。

例如:

我找到了一个有5个孩子的人,年龄分别为5岁、10岁、15岁、20岁、25岁

我想选择25岁、20岁、15岁三个孩子的个人+列表。

这就是我的错误:

Include路径表达式必须引用导航属性在类型上定义。使用虚线路径进行参考导航属性和用于集合导航的Select运算符属性。参数名称:路径

EF代码优先-如何使用Include扩展方法筛选相关对象

您不能在Include扩展方法中执行查询来筛选相关对象,您必须仅指定导航属性或表达式来组成其他include。看看这个链接(备注部分),看看你可以如何使用它。

当您使用Select方法投影查询时,您可以过滤相关对象:

var query=PersonQuery.Include(x => x.Children)
                     .Select(p=>new {PersonName=p.Name,
                                     Children=p.Children.OrderByDescending(child => child.Age).Take(3)});

如果你想了解更多关于如何将Linq投影到实体查询的信息,那么你应该看看这篇文章。