Include路径表达式必须引用在type.in eager loading上定义的导航属性

时间:2016-07-30 16:22:17

标签: c# asp.net entity-framework linq entity-framework-6

我尝试包含这样的匿名类型: 除了incomelistCompanyTitle

之外,我还想要所有PeriodTypeName个属性
 var incomeList = ctx.IncomeLists.Include(i => new
                {
                    CompanyTitle = i.CompanyId.ToString() + "/" + i.Company.CompanyName,
                    PeriodTypeName = i.ListPeriods.Select(lp => lp.PeriodType.PeriodTypeName)
                }).ToList()

我的模型部分如下: enter image description here

但我得到以下例外:

  

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

结果应该是Gridview的数据源。

1 个答案:

答案 0 :(得分:20)

您无法使用包含来选择此类数据。 Include 用于加载相关数据。您应该使用 Include 加载实体,然后选择您想要的内容。请记住从 CompanyId 中删除 .ToString()。 EF会为你做。您的查询应如下所示:

var incomeList = ctx.IncomeLists
    .Include(i => i.Company)
    .Include(i => i.ListPeriods.Select(lp => lp.PeriodType))
    .Select(i => new 
    {
        CompanyTitle =  i.CompanyId + "/" + i.Company.CompanyName,
        PeriodTypeNames = i.ListPeriods.Select(lp => lp.PeriodType.PeriodTypeName)
    })
    .ToList();