2012-09-24 57 views
0

我對C#項目工作使用LINQToSQL,但現在我有以下查詢一個問題:集團和計數Linq中的問題

var groupByQuery = (from c in db.Customers 
          join o in db.Orders on c.CustomerID equals o.CustomerID into lf1 
          from or in lf1.DefaultIfEmpty() 
          group c by c.CustomerID into g 
          select new 
          { 
           CustomerID = g.Key, 
           Count = g.Count() 
          } 
          ).OrderBy(x => x.Count); 

正如你可以看到我在做一個LEFT OUTER JOIN和分組由CustomerID,一切順利到目前爲止。但是當我看到結果時,我意識到沒有任何OrderCustomers在它們的Count字段中具有「1」。

這是爲什麼?在這些情況下,Count字段應該有一個「0」,我做錯了什麼?

,我發現這個問題在這裏:

linq-count-query-returns-a-1-instead-of-a-0

linq-to-sql-joining-query-returning-1-instead-of-0

但他們都不一直對我很有幫助,我希望有人能幫忙,謝謝提前。

回答

1

即使它是空的,仍然會有記錄 - 包含「NULL」的集合仍然是一行 - 這就是爲什麼它說有1條記錄。如果您爲Count方法提供了一個用於記錄數量的參數,它應該會更好。

Count = g.Count(a => a.SomeNullableField != null) 
+0

謝謝您的回覆。但這只是我的問題:從'.Count()'方法,我無法從'訂單'表訪問任何字段,這阻止我知道它是否有任何訂單 – Dante

+0

啊 - 由CustomerID而不是'lf1組'或' '來訪問加入的表格。 – eouw0o83hf

1

你讓事情太複雜了。 join...into執行group join,所以訂單在您的前兩行代碼中按CustomerId分組。這應該工作:

var groupByQuery = (from c in db.Customers 
        join o in db.Orders on c.CustomerID equals o.CustomerID into lf1 
        select new 
        { 
         CustomerID = c.Id, 
         Count = lf1.Count() 
        } 
        ).OrderBy(x => x.Count);