4

以下のコードを使用して、文字列、日付、金額の 3 つの列の重複した行を取得します。このLINQで列名の動的リストを入力して重複行を見つけることができる一般的な方法はありますか?

DataTable allDuplicates = dt.AsEnumerable()
    .GroupBy(dr => new
    { 
        Field1 = dr.Field<object>("String"), 
        Field2 = dr.Field<object>("Date"), 
        Field3 = dr.Field<object>("Money"), 
    })
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .ToList().CopyToDataTable();
}
4

2 に答える 2

3

ArrayEqualityComparer<T>カスタムタイプ(ここにリストされているものなど)の場合はどうですか :

string[] colsToConsider = ...

var allDuplicates = dt.AsEnumerable()
                      .GroupBy(dr => colsToConsider.Select(dr.Field<object>)
                                                   .ToArray(),
                               new ArrayEqualityComparer<object>())       
                      .Where(g => g.Count() > 1)
                      .SelectMany(g => g)
                      .CopyToDataTable();

Dictionary<TKey, TValue>ここで配列インデックスの暗黙的な使用がハックであることがわかった場合は、(および関連する辞書比較器) の使用を検討することもできます。

于 2013-03-01T15:48:40.953 に答える
0

上記のコードを実行します。

メソッド 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください

于 2017-05-27T08:30:31.977 に答える