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运算符属性。参数名称:路径
您不能在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投影到实体查询的信息,那么你应该看看这篇文章。