包含路径表达式必须引用 type.in 预加载中定义的导航属性

Posted

技术标签:

【中文标题】包含路径表达式必须引用 type.in 预加载中定义的导航属性【英文标题】:The Include path expression must refer to a navigation property defined on the type.in eager loading 【发布时间】:2016-07-30 16:22:17 【问题描述】:

我尝试包含这样的匿名类型: 除了CompanyTitle ,PeriodTypeName 之外,我还想要所有incomelist 属性)

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

我的模型部分是这样的:

但我得到以下异常:

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

结果应该是 Gridview 的数据源。

【问题讨论】:

查看msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx 您不能包含对象。您实际上必须包含导航属性。如果要包含两个属性,请使用 Include().Include()。 【参考方案1】:

您不能使用 Include 来选择这样的数据。 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();

【讨论】:

以上是关于包含路径表达式必须引用 type.in 预加载中定义的导航属性的主要内容,如果未能解决你的问题,请参考以下文章

包含路径表达式必须引用在类型上定义的导航属性(使用 LINQ 选择数据)

我必须在 Perl 预编译的正则表达式中转义哪些字符?

Include路径表达式必须引用在类型EF上定义的导航属性。使用关系表[duplicate]

如何调试“每个 GROUP BY 表达式必须包含至少一列不是外部引用错误”

从自定义路径预加载 env 文件

在 Android 中预加载网页(使用 WebView?)