【发布时间】:2015-12-18 15:51:40
【问题描述】:
我不确定这是否可能。
一些要求
- 我们的查询自始至终都是 IQueryable。
- 通过 OData 传递的所有参数
- Entities 和 Business Entities 是分开的 我们的查询应该只
- 返回业务实体,而不是数据实体
这就是我们正在尝试做的事情
var query = from mpg in this.markingPeriodGroupRepository.GetAll()
join mp in this.markingPeriodRepository.GetAll().Include(x => x.SchoolMarkingPeriods)
on mpg.MarkingPeriodGroupID equals mp.MarkingPeriodGroupID
select new MarkingPeriodTerm
{
MarkingPeriodGroupID = mpg.MarkingPeriodGroupID,
MarkingPeriodGroupName = mpg.MarkingPeriodGroupName,
SchoolMarkingPeriods = mp.SchoolMarkingPeriods.AsQueryable()
.Project().To<SchoolMarkingPeriod>(null).ToList()
};
在运行时,我们得到这个错误:
LINQ to Entities 无法识别方法 'System.Linq.IQueryable
1[NHA.App.Core.v2.Business.Models.SchoolMarkingPeriod] To[SchoolMarkingPeriod](System.Collections.Generic.IDictionary2[System.String,System.Object])' 方法,并且此方法无法转换为存储表达式。
是否可以在此 IQueryable 中自动映射此属性?
【问题讨论】:
-
问题不是很清楚。什么是 OData 和数据?您还可以提供实体的代码吗?具体来说,mp.SchoolMarkingPeriods的定义是什么?
-
我正在尝试找到一种方法来更清晰地构建我的问题。嗯...基本上,我不想在 AutoMapper 中使用 .Project() 来尝试将其转换为 SQL,而是延迟执行我正在尝试做的事情。
-
您最好的选择是自己构建选择器表达式。从技术上讲,它是一个带有成员 init 的
NewExpression,我怀疑To方法不能转换为可翻译的表达式无论如何,这意味着您仍然必须使用另一个@987654325 @ 为SchoolMarkingPeriod自己投射(初始化成员SchoolMarkingPeriods。这很复杂,但它是满足您要求的唯一方法。
标签: c# entity-framework linq automapper iqueryable