3

問題:大量のデータを含むリストがあり、重複データを1つのユニットにマージする方法がわかりません+他のユニットに影響を与えることはありません。可能であれば、LINQを使用して結果を達成するために、さらにリストを作成せずに、すべてが同じリストで行われるようにします。

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

広い意味で、approverIDASを使用したcaseID1のようなものが必要です23 ,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);

最初のラムダ式はグループキーを選択します。2番目のラムダ式は値を選択します。2番目の式を省略すると、ソース値が返されます。次のような結果を使用できます。

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 に答える