[英]Why does this LINQ join query work, but this other one doesn't?
我使用join方法編寫了兩個LINQ查詢。 本質上,如果我切換要連接的對象的順序,查詢將不再起作用並拋出錯誤:
“無法創建類型為'Domain.Entities.UsersSitesRole'的常量值。在此上下文中僅支持基本類型(例如Int32,String和Guid')。”
var foo2 = //works
from p in privilegesForUser
join c in repository.Child on p.SiteId equals c.Child_SiteID
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };
var foo3 = //throws exception
from c in repository.Child
join p in privilegesForUser on c.Child_SiteID equals p.SiteId
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };
對象privilegesForUser
是從我的Entity Framework上下文(UsersSiteRole)派生的實體列表, repository.Child
也是來自我的EF上下文的IQueryable<Child>
。
這是由EF解析它在擴展方法中獲得的表達式樹的方式引起的。
在許多情況下,查詢在邏輯上是正確的並且在IEnumerable
(Linq to Objects)上執行得很好但在Linq to Entities中失敗。 基本上,幾乎不可能將任何邏輯表達式樹編譯成適當的SQL語句(SQL不理想,遠離面向對象的世界),這就是EF放棄的情況。 隨着時間的推移,你習慣於了解哪些有效,哪些無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.