我知道實體框架有一些LINQ支持問題(至少與其前身LINQ to SQL相比)......通常我可以找到重構我的LINQ查詢的創造性方式它支持EF並且不拋出一個實體框架複雜LINQ支持
"Unable to create a constant value of type ..."
但是這次我遇到了麻煩。像往常一樣,這個問題與複雜的連接有關。這次我們需要對一些我正在使用的遺留數據進行建模。
我有辦事處查詢(一個簡單的POCO)
public IQueryable<Office> Offices
{
get
{
IQueryable<Office> query =
from pn in _context.Locations
where pn.Type == "Y"
select new Office
{
Id = pn.Id + 1000,
Name = pn.Name,
};
query = query.Union(
from r in _context.Resources
where r.ResourceType == "L"
select new Office
{
Id = r.ResourceId,
Name = r.ResourceName,
});
return query;
}
}
然後,我有別的東西上有一個寫字樓物業。
public IQueryable<ScheduleEntry> ScheduleEntries
{
get
{
return
from pc in _context.CalendarEntries
join o in this.Offices on pc.LocationId
equals o.Id into offices
from office in offices.DefaultIfEmpty()
let mainOffice = this.Offices.First()
select new ScheduleEntry
{
Id = pc.CalendarId,
StartDateTime = pc.StartDateTime ?? DateTime.MinValue,
EndDateTime = pc.EndDateTime ?? DateTime.MinValue,
Office = pc.LocationId == 0 ? mainOffice : office,
};
}
}
請注意,告訴我使它成爲一個枚舉失敗的目的......所以請不要提醒。
等等....做CalendarEntries.ToArray()
拋出"Unable to create a constant value of type Office"...
具體問題是let mainOffice = Offices.First()
。如果我刪除該邏輯,查詢工作正常。任何想法如何使這個工作與實體框架?
謝謝。
哇。 「可憐的LINQ支持?」我認爲你應該把這個問題關閉的情緒或風險編輯爲主觀和論證。堅持這一點。 – 2011-05-29 01:35:35
EF沒有差的linq支持。它不依賴於商店。 Linq to sql基本上是一個SQL Server代碼生成,而EF是一個真正的ORM。這意味着只有在任何數據存儲(不只是SQL Server)中有辦法執行它們時,計算的屬性纔會起作用。這不是不好的支持,只是通用的數據存儲支持。 – Gats 2011-05-29 01:42:18
這聽起來更像是一個威脅,而不是一個建議。雖然公平,但我正在尋求幫助,而不是威脅。 – Jeff 2011-05-29 01:43:06