2010-09-27 87 views
2

我有一個表中存儲數據值和兩個分層標籤的數據庫。Linq GroupBy與多個組的投影

Data 
{ 
    int ID, 
    string Label, 
    string Section, 
    double Value 
} 

一個示例項,來說明我的問題:

{"Sport", "", 12} 
{"Sport", "Baseball", 33} 
{"Sport", "Football", 44} 

{"Food", "", 34} 
{"Food", "Pizza", 56} 
{"Food", "Donuts", 19} 

我希望能夠打印出的價值觀,像這樣:

Sport | 12 
Baseball | 33 
Football | 44 

Food  | 34 
Pizza | 56 
Donuts | 19 

這是我的代碼那就完成了我想要的50%:

var first = (from d in db.Data 
      where d.ID= PARAM 
      select d); 

var row = first.GroupBy(x => x.Label); 

     foreach (var k in row) 
     { 
      Console.Write(k.Key + "\t|"); 

      foreach (var j in k) 
      { 
       Console.Write(j.Data); 
      } 

      Console.Write("\n"); 
     } 

但這只是打印出來:

Sport | 12 
Sport | 33 
Sport | 44 

Food  | 34 
Food  | 56 
Food  | 19 

我明白爲什麼,我只是不知道如何從k.key部分訪問.Section屬性。

如何使用linq來實現我想要的輸出?

我得到它的工作:

變種行= first.GroupBy(X =>新的{x.Label,x.Section});

  foreach (var k in row) 
     { 
      Console.Write(k.Key.Section == null || k.Key.Section == "" ? k.Key.Label : k.Key.Section); 
     ... 
     } 

新問題:

如何檢測 「運動」/邊緣 「民以食爲天」。我想插入一個分隔符(------------);

+0

你們的榜樣輸出不匹配你的代碼。 – dtb 2010-09-27 16:44:44

回答

2
foreach (var group in groups) 
{ 
    foreach (var item in group) 
    { 
     string label = !string.IsNullOrEmpty(item.Section) 
         ? item.Section 
         : item.Label; 

     Console.WriteLine("{0,-8} | {1}", label, item.Data); 
    } 

    Console.WriteLine("-------------"); 
} 

應打印

 
Sport | 12 
Baseball | 33 
Football | 44 
------------- 
Food  | 34 
Pizza | 56 
Donuts | 19 
-------------