2014-02-06 85 views
2

我正在將兩個linq查詢集中到一個查詢中。基本上我試圖通過以下查詢來實現的是獲取與用戶相關的所有信息,而不管他們是否有任何訂單。Linq to Entities left join return 0 records

正如我目前編寫的查詢,它完美的工作,只要至少有一個用戶ID的訂單,我正在傳遞給方法。

我的理解是.DefaultIfEmpty()是linq的SQL左連接的等價物,但以下查詢返回尚未下訂單的任何用戶的0記錄。

查詢

var orders = (from u in db.people where u.id == UserId 
         join o in db.product_transactions.DefaultIfEmpty() on u.id equals o.user_id 
         join sta in db.order_statuses.DefaultIfEmpty() on o.order_status equals sta.id 
         join ship in db.shipping_types.DefaultIfEmpty() on o.shipping_type equals ship.shipping_id 
         select new { o, u, sta, ship }).ToList(); 

回答

3

有兩種方法來創建一個左連接使用fromWhere

使用 intofrom

join o in db.product_transactions on u.id equals o.user_id into og 
from o in og.DefaultIfEmpty() 

2)

1)

from o in db.product_transactions.Where(x => u.id == x.user_id).DefaultIfEmpty() 
2

.DefaultIfEmpty()不是左連接語法。 .DefaultIfEmpty()是左連接語法的一部分,如果單元格爲空,它將爲您提供默認值。

An example left join from MSDN,注意進出。

var query = from person in people 
      join pet in pets on person equals pet.Owner into gj 
      from subpet in gj.DefaultIfEmpty() 
      select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };