2011-02-24 69 views
0

這是我LINQ GROUP BY和組合成CSV

ID Value 
1 Val1 
1 Val2 
3 Val3 
3 Val4 
4 Val5 

我需要

ID Value 
1 Val1, Val2 
3 Val3, Val4 
5 Val4 

我停留在這一點上:

 var groups = Result.GroupBy(res => res.ID);  
     foreach (var group in groups) 
     {      
     foreach (var entry in group) 
     { 

     } 
     } 

如何獲得結果變成一個新的匿名類型?

請注意,我還需要一個可以序列化的具體類型。

編輯:最終的解決方案是像

[Serializable] 
public class KeyValueCSV 
{ 
    public decimal Key { get;set;} 
    public string CSVValues { get;set;} 
} 

List<KeyValueCSV> kvCSVList = new List<KeyValueCSV>(); 
KeyValueCSV kvCSV; 

      var groups = Result.GroupBy(res => res.ID);  
      foreach (var group in groups) 
      { kvCSV = new KeyValueCSV(); 
      foreach (var entry in group) 
      { 
       kvCSV.id = entry.id; 
       kv.CSVValues = enrty.Value + ", "; 
      } 
      kvCSVList.Add(kvCSV); 
      } 
+0

所以一些指導,你不需要一個匿名類型,你只需要把它放入一個可序列化的類型,爲什麼你的問題題爲'LINQ group by和combine as CSV'我猜你忘了提及那件... – Nix 2011-02-24 13:20:28

回答

4

集團有你需要的一切

[Serializable] 
public class KeyValueCSV 
{ 
    public string Key { get;set;} 
    public List<string> CSVValues { get;set;} 
} 

var groups = 
     Result.GroupBy(res => res.ID) 
     .Select(x => new KeyValueCSV() { 
      Key=x.key, 
      CSVValues= string.Join(",", x.ToList()) 
      } 
     ); 

你也可以做到這一點:

var groups = (
from res in Result 
group r by res.ID 
into grouping 

select 
    new KeyValueCSV() 
    { 
    Key = grouping.Key, 
    CSVValues= string.Join(",", grouping.ToList()) 
    } 
); 

**讓我知道我是否搞砸了;)我有蜜蜂N的世界蟒最近,所以我可能已成功地混合一些...語法時才

+0

我需要一個具體的對象,可以被序列化。 Console.WriteLine沒有幫助。 – 2011-02-24 13:14:05

+1

然後把它變成一個匿名類型不會幫助你。你需要解釋你想要什麼樣的最後的東西。現在我只是給了你所要求的......一個匿名類型的組合。 – Nix 2011-02-24 13:15:17

+0

似乎CSVValues是{ID = 1,Value = Val1},{ID = 2,Value = Val2},第二個查詢'r'未定義。 – 2011-02-25 05:45:30

1

如果你正在做的LINQ到對象,你可以做到這一點

from res in Result 
group res by res.ID into grouping 
select new 
{ 
ID = grouping.Key, 
Values = grouping.Select(r => r.Value).Aggregate((a,b) => a + ", " + b) 
}