有什么方法可以减去两个数据表,以使第一个数据表的行不在第二个数据表中?

我已经尝试过.Except()方法,如下所示,但它对我不起作用。

dt1.AsEnumerable().Except(dt2.AsEnumerable()).CopyToDataTable();


我认为我在使用此方法时有错误,但是我找不到?

最佳答案

您可以使用IEquailtyComparer创建自己的比较器

 public class CustomDataRowComparer : IEqualityComparer<DataRow>
    {
        public bool Equals(DataRow x, DataRow y)
        {
            for (int i = 0; i < x.Table.Columns.Count; i++)
            {
                if (x[i].ToString() != y[i].ToString())
                {
                    return false;
                }

            }
            return true;
        }

        public int GetHashCode(DataRow obj)
        {
            return obj.ToString().GetHashCode();
        }
    }


以后您可以这样称呼它:

CustomDataRowComparer myDRComparer = new CustomDataRowComparer();
var result2 = dt1.AsEnumerable().Except(dt2.AsEnumerable(),myDRComparer).CopyToDataTable();

关于c# - 如何用linq减去两个数据表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12136754/

10-14 18:15