两个数据表的交集使用自定义数据比较器返回零行

本文关键字:数据 自定义 比较器 零行 返回 两个 数据表 | 更新日期: 2023-09-27 17:57:56

我想获得两个超过45000行的数据表之间的所有公共行(包括重复行)。

但是,我想跳过比较范围之外的"第2列"answers"第6列之后的所有列"。但我并没有得到任何行作为交集的结果。有人能告诉我哪里做错了吗?

这是我写的代码:

CustomDataRowComparer myDRComparer = new CustomDataRowComparer();
var commonData = outputTable.AsEnumerable().Intersect(prevTable.AsEnumerable(), myDRComparer).CopyToDataTable();

   public class CustomDataRowComparer : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y)
        {
            for (int i = 0; i < 7; i++)
            {

                if (i !=1) // Don't want to consider this column for comparison
                {
                    if (x[i].ToString() != y[i].ToString())
                    {
                        return false;
                    }
                }
            }
            return true;
        }
        public int GetHashCode(DataRow obj)
        {
            return obj.ToString().GetHashCode();
        }

两个数据表的交集使用自定义数据比较器返回零行

这是完整的代码

    public class CustomDataRowComparer : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y)
        {
            return x.Equals(y);
        }
        public int GetHashCode(DataRow obj)
        {
            return string.Join("^", obj.ItemArray.Select((x, i) => i == 1 ? "" : x.ToString()).ToArray()).GetHashCode();
        }
    }