使用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();
}

使用LINQ查找重复的行(带有指定列的列表)

如何使用自定义的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)'不能从用法中推断出来。尝试显式指定类型参数