2013-07-31 64 views
0

我有這樣一個清單:使用LINQ - 的毗連重複列

ColumnA | ColumnB | ColumnC 
--------+---------+--------- 
111  | 222  | xx 
111  | 222  | yy 
111  | 222  | zz 

但我想爲轉移:

ColumnA | ColumnB | ColumnC 
--------+---------+--------- 
111  | 222  | xx, yy, zz 

如果可能的話,我想在同一個列表,而無需創建多個列表使用LINQ來實現結果。有沒有人有一個想法如何做到這一點?

+0

爲什麼一定要在同一個列表,並列到一個新的列表? –

+1

這是Linq到Sql,Linq到實體,Linq還是對象。換句話說,你打數據庫?如果是的話,你使用EF或Linq到SQL? –

回答

1

VB版,(使用元組,因爲我不知道你的對象定義):

Dim list = New List(Of Tuple(Of Integer, Integer, String)) 

    list.Add(Tuple.Create(111, 222, "xx")) 
    list.Add(Tuple.Create(111, 222, "yy")) 
    list.Add(Tuple.Create(111, 222, "zz")) 

    Dim result = list.GroupBy(Function(n) Tuple.Create(n.Item1, n.Item2)) _ 
     .Select(Function(m) Tuple.Create(m.Key.Item1, m.Key.Item2, m.Select(Function(t) t.Item3).Aggregate(Function(x, y) x & "," & y))) 
1

不知道爲什麼你正在尋找在同一個列表做......但在這裏是LINQ查詢;

List<Column> list = new List<Column>(); 

var newList = list.GroupBy(x => new { A = x.ColumnA, B = x.ColumnB }) 
      .Select(y => new Column 
      { 
       ColumnA = y.Key.A, 
       ColumnB = y.Key.B, 
       ColumnC = y.ToList().Select(el => el.ColumnC).Aggregate((y1, y2) => y1 + "," + y2) 
      }); 



class Column 
{ 
    public string ColumnA { get; set; } 
    public string ColumnB { get; set; } 
    public string ColumnC { get; set; } 
} 
+0

謝謝你,普拉什。它的工作。 ^^ –

+0

很高興聽到!請隨時將其標記爲答案! :) – Prash

0
class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Columns> list = new List<Columns>() {new Columns(){Column1="111",Column2="222",Column3="xx"}, 
     new Columns(){Column1="111",Column2="222",Column3="yy"}, 
     new Columns(){Column1="111",Column2="222",Column3="zz"} 
     }; 
     var result=list.GroupBy(c=>new { c.Column1, c.Column2 }) 
      .Select(g=>new Columns(){Column1=g.Key.Column1,Column2=g.Key.Column2,Column3=string.Join(",",g.Select(s=>s.Column3))}); 
    } 
} 

public class Columns 
{ 
    public string Column1; 
    public string Column2; 
    public string Column3; 
}