包含路径表达式必须引用 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 选择数据)
Include路径表达式必须引用在类型EF上定义的导航属性。使用关系表[duplicate]