使用LINQ -Concat重复记录

时间:2012-11-28 13:32:41

标签: c# linq-to-sql

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

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

在更广泛的意义上,我想要caseID 1与approverID AS 23 ,45,56

4 个答案:

答案 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