0

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

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

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

结果数据表的列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"]);
        }

    }

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

4

1 回答 1

1

所以你不知道如何返回主表,其中的所有行不在.dtdt

通常,您不能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];
}
于 2013-03-19T11:59:56.750 回答