2013-01-11 111 views
0

我有一個數據表與此示例數據。Linq查詢合併單元格結果?

enter image description here

需求量的就是讓這個數據表,所以它返回的所有行,但重複的行(過去兩年爲例)的要求是通過使一個記錄與一個逗號和回報有不同的價值觀結合起來。

例如:

金銀,Metllurgist 19尼克戈登。 。 。 。 。

請幫幫我。

THANKS

回答

1

由於專業領域是唯一變化的領域,你想爲這個領域的綜合價值,需要
1. Grouping基於Profession
2. Select記錄
3.使用以下Aggregate用於組合專業

您還需要定義一個具體類型來表示(ProfessionRecord,代碼如下)

var results = dataTable.AsEnumerable() 
        .GroupBy(x=> x.Field<string>("Profession")) 
        .Select ( grouping => 
           new { 
            Key=grouping.Key, 
            CombinedProfession = grouping.Aggregate((a,b)=> a + " " + b) 
           }) 
        .Select (x=> new ProfessionRecord 
          { 
           Id = x.Key.Id, 
           Name = x.Key.Name, 
           Profesion = x.CombinedProfession, 
          }); 

VB.NET從tool

Dim results = dataTable.AsEnumerable().GroupBy(Function(x) x.Field(Of String)("Profession")).[Select](Function(grouping) New With { _ 
    .Key = grouping.Key, _ 
    .CombinedProfession = grouping.Aggregate(Function(a, b) a + " " + b) _ 
}).[Select](Function(x) New ProfessionRecord() With { _ 
    .Id = x.Key.Id, _ 
    .Name = x.Key.Name, _ 
    .Profesion = x.CombinedProfession _ 
}) 

(我不知道它是多麼優化,VB.NET是不是我的第一語言)

您需要添加的Data Row Extensions參考方法Field<T>(string fieldname)

+0

謝謝@Tilak,行不會重複,因爲Profession列即使對於同一行也會有不同的值。我想讓datatable返回所有行,重複行將它們組合起來,對於Profession列,可能會使它們成爲逗號分隔,就像我在查詢中提到的那樣。請指導 – user576510

+0

答案更新爲非重複專業領域。 – Tilak

+0

我很抱歉再次問,但因爲我在vb中做,你能給vb代碼嗎?我試圖用轉換器轉換它,但它說錯誤,我不明白是什麼。請 – user576510