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 回答