簡體   English   中英

為什么這個LINQ連接查詢工作,但另一個沒有?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM