使用LINQ查找重复的行(包含指定列的列表)

我使用下面的代码获取3列的重复行:String,Date,Money。 我想知道是否有任何通用方法可以在此LINQ中输入动态列名列表来查找重复行?

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

如何使用自定义ArrayEqualityComparer类型(例如此处列出的类型):

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

如果你发现隐藏使用数组索引Dictionary你也可以考虑使用Dictionary (和一个相关的字典比较器)。

执行上面的代码。

无法从用法中推断出方法’System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)’的类型参数。 尝试显式指定类型参数