2012-11-28 87 views
3

問題:我有一個包含大量數據的列表,我不知道如何將重複數據合併到一個單元中,它不應該影響其他人。如果可能的話,想everyting在同一個列表中發生的事情,而無需創建多個列表acheive結果在更廣泛的意義上使用LINQ使用LINQ -Concat重複記錄

CaseID ApproverID 
1 23 
1 45 
1 56 
2 33 
2 90 
3 58 
3 79 

我想是這樣caseID 1 approverID AS 23 ,45,56

+0

數據在列表中顯示? – Tigran

+2

請顯示您用來獲取當前結果的代碼。 –

+0

是否要用逗號加入多個ApproverID? –

回答

2

如果你想組的記錄,你可以做到這一點

var result = source.GroupBy(x => x.CaseID, x => x.ApproverID); 

var groups = myList.GroupBy(element => element.CaseId); 

,就像每個元素包含一個列表,您可以遍歷組

第一個lambda表達式選擇組密鑰。第二個lambda表達式選擇值。如果您省略第二個表達式,則會返回源值。您可以使用的結果是這樣的:

foreach (var group in result) { 
    Console.WriteLine(group.Key); 
    foreach (int value in group) { 
     Console.WriteLine(" " + value); 
    } 
} 

其結果將是

 
1 
    23 
    45 
    56 
2 
    33 
    90 
3 
    58 
    79 
5
MyData 
    .GroupBy(d => d.CaseID) 
    .Select(g => new{ 
       CaseID = g.Key, 
       ApproverIds = g.Select(x => x.ApproverID).ToList()}) 

    //.Select(x => new{ 
    //    x.CaseID, 
    //    approverIdsString = string.Join(", ", x.ApproverIds)}) 

最後一部分是註釋掉因爲列表的逗號分隔的字符串很少是個好主意。

+0

如果兩個字段都是* same *對象的一部分,那麼這就是答案。 – Tigran

1

這就是所謂的分組:

foreach (var g in groups) { 
    Console.WriteLine("Case ID:{0}", g.Key); 
    foreach (var element in g) { 
     Console.WriteLine("Approver ID:{0}", element.ApproverId); 
    } 
}