3

问题:我有一个包含大量数据的列表,但我不知道如何将重复数据合并到一个单元中 + 它不应该影响其他单元。如果可能的话,希望每件事都发生在同一个列表中,而不需要创建更多列表来实现结果使用 LINQ

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

从更广泛的意义上说,我想要带有approverID AS的caseID 123 ,45,56

4

4 回答 4

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)})

最后一部分被注释掉,因为逗号分隔的列表字符串很少是一个好主意。

于 2012-11-28T13:35:19.047 回答
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
于 2012-11-28T13:45:52.787 回答
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);
    }
}
于 2012-11-28T13:36:25.397 回答
-1

为避免重复,请使用Enumerable.Union

于 2012-11-28T13:35:09.873 回答