LINQ CustomDataRowEqualityComparer

本文关键字:CustomDataRowEqualityComparer LINQ | 更新日期: 2023-09-27 18:04:34

我使用CustomDataRowEqualityComparer()来比较具有不同列数的2个数据表,但它们共享一些列:

var result= maindatatable.AsEnumerable().Except(dt.AsEnumerable(), new CustomDataRowEqualityComparer()).CopyToDataTable();

如何使结果数据表只包含dt中的列,在上面的上下文中

result datatable有maindatatable

的列

这是比较器类

public class CustomDataRowEqualityComparer : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y)
        {
            return ((int)x["id"] == (int)y["id"]);
        }
        public int GetHashCode(DataRow obj)
        {
            return ((int)obj["id"]);
        }
    }

返回dt中不存在的maindatatable中的所有行

LINQ CustomDataRowEqualityComparer

所以你不知道如何返回dt而不是的所有行,但dt的列的主表。

一般情况下,不能从maintable中选择行,同时从另一个DataTable中选择列。因此,必须用这些行填充dt的新实例(使用dt.Clone()创建所有列)。

因此,例如(假设表dt的列也存在于maintable中,而不是相反):

var result = maindatatable.AsEnumerable()
    .Except(dt.AsEnumerable(), new CustomDataRowEqualityComparer());
var dt2 = dt.Clone();
foreach(DataRow mainRow in result)
{
    var newRow = dt2.Rows.Add();
    foreach (DataColumn col in dt2.Columns)
        newRow[col] = mainRow[col.ColumnName];
}
相关文章:
  • 没有找到相关文章