2010-02-25 71 views
1

我有一個LINQ問題。比方說,我有一個具有以下值的數據庫:用C#和LINQ對值進行分組

=================== 
Date,product,orders 
------------------- 
1/2/2003,apple,3 
1/2/2003,orange,5 
1/3/2003,orange,6 
1/4/2003,grape,2 
=================== 

我如何使用LINQ得到一個結果組按日期的物品,並將它們放入一個變量,它看起來像這樣:

========================== 
Date, Apple, Orange, Grape 
-------------------------- 
1/2/2003,3,5,0 
1/3/2003,0,6,0 
1/3/2003,0 0,2 
========================== 

任何幫助將不勝感激。謝謝!

+2

請與代碼風格重新格式化爲使其更具可讀性。嘗試重新解釋這個問題,讓它變得更加清晰。同時顯示錶格結構和所需的結構。 – AxelEckenberger 2010-02-25 23:08:16

+0

看起來像一個樞軸是什麼被要求。 – 2010-02-26 18:25:50

回答

4

這裏測試我做過:

var data = new []{ 
    new { Date = new DateTime(2003, 1, 2), Product = "apple", Orders = (int?) 3 }, 
    new { Date = new DateTime(2003, 1, 3),Product = "orange", Orders = (int?) 5 }, 
    new { Date = new DateTime(2003, 1, 4), Product = "grape", Orders = (int?) 2 }, 
    new { Date = new DateTime(2003, 1, 4), Product = "grape", Orders = (int?) null } 
}; 

var result = data.GroupBy(x => x.Date) 
       .Select(g => new { 
        Date = g.Key, 
        Apples = g.Where(x => x.Product == "apple").Sum(x => x.Orders), 
        Oranges = g.Where(x => x.Product == "orange").Sum(x => x.Orders), 
        Grapes = g.Where(x => x.Product == "grape").Sum(x => x.Orders) 
       }); 

測試數據中不包含空值的結果,但0蘋果,桔子,葡萄。

+0

如何處理 蘋果= g.Where(x => x.Product ==「apple」)。Sum(x => x.Orders), 返回空值?我可以在這種情況下返回0而不是null嗎? – sooprise 2010-02-26 19:29:18

+0

查看修改後的解決方案。我沒有測試它,但AFAIK它應該工作時,x.Orders返回null。 – AxelEckenberger 2010-02-26 20:25:37

+0

出現以下錯誤: 運算符'??'不能應用於'double'和'int'類型的操作數 感謝您的幫助至此 – sooprise 2010-02-26 20:30:53

0

使用Linq to SQL,你可以做類似的事情;

var query = from p in products orderby p.Date select p;

我不確定你的意思是「把它們放入一個變量」。

0

試試這個:

var x = from tb in mytable 
     group date by tb.date; 
相關問題