Entity framework 实体框架-联合事业”;无法创建类型为“”的常量值;
要选择所有活动的Entity framework 实体框架-联合事业”;无法创建类型为“”的常量值;,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,要选择所有活动的调度s,我有以下代码: var allSchedulesOnALine = CurrentUser.Lines.SelectMany(o => o.Scheduling).Where(o => o.Active); var allSchedulesUnscheduled = Entities.SchedulingSet .Where(o => o.Line == null && o.Site.Id == CurrentUser.Site.
调度
s,我有以下代码:
var allSchedulesOnALine = CurrentUser.Lines.SelectMany(o => o.Scheduling).Where(o => o.Active);
var allSchedulesUnscheduled = Entities.SchedulingSet
.Where(o => o.Line == null && o.Site.Id == CurrentUser.Site.Id &&
o.Factory == CurrentUser.Factory && o.Active);
IEnumerable<Scheduling> allSchedules = allSchedulesUnscheduled.Union(allSchedulesOnALine);
foreach(Scheduling schedule in allSchedules.OrderBy(o => o.Ordering))
{
//Do Stuff
}
很好用
有人知道为什么会这样吗?我是否遗漏了一些重要的东西,或者这是一个bug
我应该提到我使用的是实体框架3.5。EF4目前不是我们的选择,这超出了我的控制范围:\您正在使用“重新排序”调用两种不同的方法 您没有显示
allSchedulesOnALine
或allSchedulesUnscheduled
的类型,但我打赌allSchedulesOnALine
属于IEnumerable
类型,allSchedulesUnscheduled
属于IQueryable
类型
因此,当您调用时,您要求EF将表达式转换为SQL。但是,您传递的参数的类型是IEnumerable
,它无法将其转换为查询
另一方面,当您调用时,您要求LINQ to对象在内存中执行整个操作,这很好,尽管可能较慢
因此,行为不同的原因是您调用了两个完全不同的方法,它们做不同的事情,但恰好具有相同的名称。不,这不是错误。我相信错误消息表明EF无法将union语句转换为SQL,但我不确定原因。是否可能
CurrentUser.Lines.SelectMany(o=>o.Scheduling)。其中(o=>o.Active)
未使用延迟执行?在这种情况下,它可能会解释为什么可以按一个方向而不是另一个方向使用它——一个在内存中运行,另一个试图完全在SQL中运行。想法?这一定是你第十二次帮我解决EF问题了,包括,我想,以前的问题(呃)。再次感谢你,克雷格!
IEnumerable<Scheduling> allSchedules = allSchedulesOnALine.Union(allSchedulesUnscheduled);