Linq to Entity Framework是否可以進行外連接

entity-framework left-join linq

有很多使用Linq到Sql的外連接的例子,所有這些例子都是在Linq to Entity Framework不支持的DefaultIfEmpty()上進行的。

這是否意味著Linq to Entity使用.NET 3.5無法實現外連接(我知道DefaultIfEmpty將帶有4.0 ---但這對我來說不是一個選項)

有人可以使用Linq to EntityFramework提供一個簡明的例子。

一般承認的答案

在LINQ to Entities中,考慮關係而不是SQL連接。因此,與CustomerInfo具有一到零或一個關係的實體Person上的SQL外連接的字面等價物將是:

var q = from p in Context.People
        select new
        {
            Name = p.Name,
            IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
        };

L2E將合併連接,因此如果CustomerInfo為null,則整個表達式的計算結果為null。因此,鑄造成可空的布爾,因為推斷類型的非可空博爾無法保持這種結果。

對於一對多,您通常需要層次結構,而不是平面的SQL樣式結果集:

var q = from o in Context.Orders
        select new 
        {
            OrderNo = o.OrderNo,
            PartNumbers = from od in o.OrderDetails
                          select od.PartNumber
        }

這就像左連接,因為你仍然得到沒有細節的訂單,但它是像OO的圖形而不是像SQL這樣的集合。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因