4

私は linq 式とラムダ式の学習を始めたばかりで、複雑なオブジェクト コレクションで重複を見つけるのに適しているようですが、少し混乱しており、誰かが私を幸せなコーディングへの道に戻してくれることを願っています.

私のオブジェクトは list.list.uniqueCustomerIdentifier のように構成されています

複合オブジェクト全体で重複する uniqueCustomerIdentifier がないことを確認する必要があります。重複がある場合は、どれが重複しているかを特定し、重複のリストを返す必要があります。

4

3 に答える 3

9
  • 階層を展開する
  • 各要素をその uniqueID プロパティに射影する
  • これらの ID をグループ化します
  • 複数の要素を持つグループでグループをフィルタリングします
  • 各グループをグループのキーに射影します (uniqueID に戻します)
  • クエリを列挙し、結果をリストに格納します。

var result = 
  myList
    .SelectMany(x => x.InnerList)
    .Select(y => y.uniqueCustomerIdentifier)
    .GroupBy(id => id)
    .Where(g => g.Skip(1).Any())
    .Select(g => g.Key)
    .ToList()
于 2008-10-22T00:02:23.247 に答える
2

linq 演算子 Distinct( ) があり、ID のみが必要な場合に、個別のレコード セットに絞り込むことができます。equals をオーバーライドするようにクラスをセットアップした場合、またはIEqualityComparerを持っている場合は、Distinct 拡張メソッドを直接呼び出して、リストから一意の結果を返すことができます。追加のボーナスとして、Union メソッドと Intersect メソッドを使用して、2 つのリストをマージまたはフィルター処理することもできます。

別のオプションは、id でグループ化してから最初の要素を選択することです。

var results = from item in list
              group item by item.id into g
              select g.First();
于 2008-10-21T20:35:40.450 に答える
0

2 つのリスト階層を平坦化する場合は、SelectManyメソッドを使用して を に平坦化IEnumerable<IEnumerable<T>>IEnumerable<T>ます。

于 2008-10-21T20:58:20.137 に答える