2009-08-29 57 views
0

你怎麼能在linq中執行多個「group by」?如何在linq to sql中執行多個Group By?

你可以請我看看linq查詢語法和linq方法的語法。

謝謝

編輯。

我說的是多個參數,按「性別」和「年齡」來分組。

另外我忘了提及我會怎麼說加起來的所有年齡之前,我分組他們。

如果我有這樣的例子,我會怎麼做這

表產品

產品編號 產品名稱 ProductQty ProductPrice

現在想象一下,不管是什麼原因,我不得不萬噸行,每行有相同的產品名稱,不同的ProductQty和ProductPrice。

我該如何根據產品名稱對產品進行分類並將ProductQty和ProductPrice加在一起?

我知道在這個例子中,它可能沒有意義,爲什麼會有相同的產品名稱後行,但在我的數據庫它是有意義的(它不是產品)。

+0

你是指由多個參數分組?或多級分組(組內的組)? – Aziz 2009-08-29 01:37:05

回答

5

要組由多個屬性,你需要創建一個新的對象組:

var groupedResult = from person in db.People 
        group by new { person.Sex, person.Age } into personGroup 
        select new 
        { 
         personGroup.Key.Sex, 
         personGroup.Key.Age, 
         NumberInGroup = personGroup.Count() 
        } 

道歉,我沒有看到你的最後的編輯。我可能會誤解,但如果你總結年齡,你不能按它分組。你可以按性別,總計或平均年齡......但你不能按性別和總結年齡同時在一個單一的聲明。也許可以使用嵌套的LINQ查詢來獲得任何給定性別的總和或平均年齡...雖然更復雜一點。

編輯:

爲了解決您的具體問題,應該是非常簡單明瞭。你只按名稱分組,其餘的都是基本的(例如用服務和具體的dto類型更新的例子):

class ProductInventoryInfo 
{ 
    public string Name { get; set; } 
    public decimal Total { get; set; } 
} 

class ProductService: IProductService 
{ 

    public IList<ProductInventoryInfo> GetProductInventory() 
    { 
     // ... 

     var groupedResult = from product in db.Products 
          group by product.ProductName into productGroup 
          select new ProductInventoryInfo 
          { 
           Name = productGroup.Key, 
           Total = productGroup.Sum(p => p.ProductCost * p.ProductQty) 
          } 

     return groupedResult.ToList(); 
    } 
} 
+0

只要最終結果是我有一個總計字段,我可以在2個語句中完成。 – chobo2 2009-08-29 01:45:37

+0

您是否在尋找年齡或平均年齡的總和? – jrista 2009-08-29 01:51:39

+0

以及我正在尋找實際上兩個(性別和年齡的例子,但在我真正的分貝,我增加了2個表)。 – chobo2 2009-08-29 02:08:25