使用LINQ查找重复的行(带有指定列的列表)
本文关键字:列表 查找 LINQ 使用 | 更新日期: 2023-09-27 18:01:40
我使用下面的代码来获得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();
}
如何使用自定义的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>
(以及关联的字典比较器)。
同时执行上述代码。
方法"System.Linq.Enumerable.Select(System.Collections.Generic. select)"的类型参数。IEnumerable, System.Func)'不能从用法中推断出来。尝试显式指定类型参数