为了选取所有处于活动状态的Scheduling
,我有如下代码:
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
}
(Factory
是一个 int
)
当我运行这段代码时,在 foreach
行会出现以下晦涩的错误:
无法创建类型为'System.Collections.Generic.IEnumerable`1'的常量值。只支持原始类型('如Int32、String和Guid')在此上下文中。
奇怪的是,我可以分别枚举 allSchedulesOnALine
和 allSchedulesUnscheduled
。更奇怪的是,如果我重新排列联合:
IEnumerable<Scheduling> allSchedules = allSchedulesOnALine.Union(allSchedulesUnscheduled);
它运行良好!
有没有人知道为什么会出现这种情况?我是不是漏掉了什么重要的东西,还是这是一个bug?
我应该提到我正在使用Entity Framework 3.5。目前我们无法使用EF4 - 它超出了我的控制: \
CurrentUser.Lines.SelectMany(o => o.Scheduling).Where(o => o.Active)
是否可能没有使用延迟执行?如果是这样,那么它可能解释了为什么您可以按一个方向排序,而不能按另一个方向排序--一个在内存中运行,另一个试图完全在SQL中运行。你有什么想法吗? - Pandincus