2015-08-28 60 views
-1

我是LINQ的新手。有人可以解釋如何更具體地分組嗎?Linq使用c#嵌套分組?

public void additems() 
{ 
    store.Add(new DepartmentalStore() { Department = "Purchasing", 
             EmployeeID = 3322, 
             Product = "Apples", 
             Count = 1 }); 
    store.Add(new DepartmentalStore() { Department = "Purchasing", 
             EmployeeID = 3322, 
             Product = "Oranges", 
             Count = 1 }); 
    store.Add(new DepartmentalStore() { Department = "Purchasing", 
             EmployeeID = 3311, 
             Product = "Oranges", 
             Count = 2 }); 
    store.Add(new DepartmentalStore() { Department = "HR", 
             EmployeeID = 1222, 
             Product = "Apples", 
             Count = 1 }); 
    store.Add(new DepartmentalStore() { Department = "HR", 
             EmployeeID = 1111, 
             Product = "Apples", 
             Count = 3 }); 
} 

var getDep = from row in samples.store 
       group row by new { Dep = row.Department, EmpId = row.EmployeeID, 
            Prod = row.Product, Count = row.Count } into g 
       orderby g.Key.Dep, g.Key.EmpId, g.Key.Prod, g.Key.Count 
       select g; 
       //group row by row.Department 

foreach (var it in getDep) 
{ 
    Console.WriteLine(it.Key); 
} 

和上面的代碼提供了這樣的

{ Dep = HR, EmpId = 1111, Prod = Apples, Count = 3 } 
{ Dep = HR, EmpId = 1222, Prod = Apples, Count = 1 } 
{ Dep = Purchasing, EmpId = 3311, Prod = Oranges, Count = 2 } 
{ Dep = Purchasing, EmpId = 3322, Prod = Apples, Count = 1 } 
{ Dep = Purchasing, EmpId = 3322, Prod = Oranges, Count = 1 } 

的結果,但我所要的輸出是這樣的:

Department: Purchasing 
    Employee: 3322 
    Product: Apples Count: 1 
    Product: Oranges Count: 2 
         Total 3 
    Employee: 3311 
    Product: Oranges Count: 2 
         Total: 2 
      Purchasing Total: 5 

Department: HR 
    Employee: 1222 
    Product: Apples Count: 1 
         Total: 1 
    Employee: 1111 
    Product: Apples Count: 3 
         Total: 3 
        HR Total: 4 
       Grand Total: 9 

有人能解釋如何組這樣 是有可能將來自一個LINQ查詢的輸出傳遞給另一個LINQ查詢的輸入?

+7

這種「顯示」(抑制重複標題,添加小計和總計)比Linq更適合顯示層。 –

+0

「是否可以將來自一個LINQ查詢的輸出傳遞給另一個LINQ查詢的輸入」當然,但您必須更具體(最好在單獨的問題中) –

回答

0

像這樣的東西應該工作。我通過定義一個Department對象並將其列表添加到一個名爲store的對象來創建一個快速測試。您需要更新控制檯的寫信號以獲取標籤格式。

 var getDep = from row in samples.store 
     group row by row.Department 
     into g 
     select new 
     { 
      DepartmentName = g.Key, 
      Employees = 
       from emp in g 
       group emp by emp.EmployeeID 
       into eg 
       select new 
       { 
       Employee = eg.Key, 
       EmployeeProducts = eg 
       } 

     }; 
    foreach (var it in getDep) 
    { 
     Console.WriteLine(string.Format("Department: {0}", it.DepartmentName)); 
     foreach (var emp in it.Employees) 
     { 
      Console.WriteLine(string.Format("Employee: {0}", emp.Employee)); 
      var totalCount = 0; 
      foreach (var product in emp.EmployeeProducts) 
      { 
       Console.WriteLine(string.Format("Product: {0} Count: {1}", product.Product, product.Count)); 
       totalCount += product.Count; 
      } 

      Console.WriteLine("Total {0}", totalCount); 
     } 
    }