问题:我有一个包含大量数据的列表,我不知道如何将重复数据合并到一个单元中+它不应该影响其他单元。如果可能的话,希望每个都发生在同一个列表中而不创建更多列表来实现结果使用LINQ
CaseID ApproverID
1 23
1 45
1 56
2 33
2 90
3 58
3 79
在更广泛的意义上,我想要caseID 1与approverID AS 23 ,45,56
答案 0 :(得分: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)})
最后一部分被注释掉了,因为以逗号分隔的列表字符串很少是个好主意。
答案 1 :(得分:2)
如果要对记录进行分组,可以执行此操作
var result = source.GroupBy(x => x.CaseID, x => x.ApproverID);
第一个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
答案 2 :(得分:1)
这称为分组:
var groups = myList.GroupBy(element => element.CaseId);
您可以迭代组,就像每个元素都包含一个列表一样:
foreach (var g in groups) {
Console.WriteLine("Case ID:{0}", g.Key);
foreach (var element in g) {
Console.WriteLine("Approver ID:{0}", element.ApproverId);
}
}
答案 3 :(得分:-1)
为避免重复,请使用Enumerable.Union