我使用下面的代码获取3列的重复行:String,Date,Money。 我想知道是否有任何通用方法可以在此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();
}
答案 0 :(得分:3)
使用自定义ArrayEqualityComparer<T>
类型(例如一个listed here):
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>
(和一个相关的字典比较器)。
答案 1 :(得分:0)
执行上面的代码。
无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数。尝试明确指定类型参数