2013-05-07 84 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的例子。