问题:我有一个包含大量数据的列表,但我不知道如何将重复数据合并到一个单元中 + 它不应该影响其他单元。如果可能的话,希望每件事都发生在同一个列表中,而不需要创建更多列表来实现结果使用 LINQ
CaseID ApproverID
1 23
1 45
1 56
2 33
2 90
3 58
3 79
从更广泛的意义上说,我想要带有approverID AS的caseID 123 ,45,56
问题:我有一个包含大量数据的列表,但我不知道如何将重复数据合并到一个单元中 + 它不应该影响其他单元。如果可能的话,希望每件事都发生在同一个列表中,而不需要创建更多列表来实现结果使用 LINQ
CaseID ApproverID
1 23
1 45
1 56
2 33
2 90
3 58
3 79
从更广泛的意义上说,我想要带有approverID AS的caseID 123 ,45,56
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)})
最后一部分被注释掉,因为逗号分隔的列表字符串很少是一个好主意。
如果要对记录进行分组,可以这样做
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
这称为分组:
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);
}
}
为避免重复,请使用Enumerable.Union