2013-05-07 56 views
0

如果有人能向我解釋爲什麼這個查詢不像SQL左連接那樣行事,我就在遊蕩,我似乎無法解決原因。我一直在做一些狩獵,我似乎無法解決問題。據我可以告訴它應該。
I.e.在一個有5個活動客戶的表中,它只會返回2個客戶,而不是全部5個; 2與值和3與null或0?LINQ查詢不按預期查詢

var results = from c in DataContext.Customers 
       where c.Active 
       join j1 in 
       (from i in DataContext.Invoice where i.State== "Pending" && 
       i.InvoiceDate.Date >= From.Date && i.InvoiceDate.Date <= To.Date 
       group i by i.Customer into x 
         select new { x.Key, Total = x.Count() }) on a equals j1.Key 
         select new { c, j1.Total }; 

感謝

+1

嗨,有關於如何執行左外部在這個環節加入一個很好的例子:http://msdn.microsoft.com /en-us/library/vstudio/bb397895.aspx我想你錯過了這樣一個事實,即你必須調用DefaultIfEmpty方法對來自組加入的每個匹配元素序列 – juanreyesv 2013-05-07 05:09:53

+0

在你的評論和我能夠工作的anwser之間很棒它出:) – Heinrich 2013-05-07 21:35:27

回答

1

通過使用DefaultIfEmpty()方法,你可以做到這一點。 試試這個代碼 我已經implementd你的問題的解決方案 回覆我,如果它的工作

var results = from c in DataContext.Customers 
        where c.Active 
        join j1 in 
        (from i in DataContext.Invoice where i.State== "Pending" && 
        i.InvoiceDate.Date >= From.Date && i.InvoiceDate.Date <= To.Date 
        group i by i.Customer into x 
          select new { x.Key, Total = x.Count() }) on a equals j1.Key into j3 
           from k in j3.DefaultIfEmpty() 
          select new { c, k.Total }; 
+1

真棒感謝它得到它的工作,雖然只是一件事(只是微不足道的),但改變「選擇新{c,k.Total}」選擇新{C,TotalInvoices = k.Total == null?0: k.Total}「停止空例外 – Heinrich 2013-05-07 21:34:33

+0

好吧,不客氣 – kundan 2013-05-08 04:38:54

0

我會嘗試在你的子查詢j1方法DefaultIfEmpty(),因爲你不允許查詢,以便對空值。

查看similar question的例子。