EF Code First - 使用Include扩展方法过滤相关对象

时间:2016-01-04 19:12:26

标签: c# entity-framework ef-code-first linq-to-entities

给出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岁

的人

我想选择3个25岁,20岁,15岁的儿童+名单。

这是我的错误:

  

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

1 个答案:

答案 0 :(得分:3)

您无法在Include扩展方法中进行查询以过滤相关对象,您必须仅指定导航属性或表达式来组成其他包含。看看这个link(备注部分),了解如何使用它。

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

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

如果您想了解有关如何将Linq项目投影到实体查询的更多信息,那么您应该看到此post