要選擇所有Scheduling
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
}
(Factory
爲int
)
當我運行這段代碼,我上foreach
行這神祕的錯誤:
無法創建一個類型爲'System.Collections.Generic.IEnumerable`1的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。
奇怪的是,我可以單獨列舉allSchedulesOnALine
和allSchedulesUnscheduled
。即使陌生人,如果我重新訂購聯盟:
IEnumerable<Scheduling> allSchedules = allSchedulesOnALine.Union(allSchedulesUnscheduled);
它工作正常!
有沒有人知道爲什麼會發生這種情況?我錯過了一些至關重要的東西,還是這是一個錯誤?
我應該提到我正在使用Entity Framework 3.5。 EF4目前不是我們的選擇 - 它超出了我的控制範圍:\
我相信這個錯誤信息表明EF不能將你的union語句翻譯成SQL,但我不知道爲什麼。是否有可能'CurrentUser.Lines.SelectMany(o => o.Scheduling).Where(o => o.Active)'沒有使用延遲執行?在這種情況下,它可能會解釋爲什麼你可以使用它來定向一個方向,而不是另一個方向 - 一個在內存中運行,另一個則試圖在SQL中完全運行。思考? – Pandincus 2011-05-10 22:42:48