比较两个DataTable求取差值,为了保证目标表中的数据的真实性不能用默认的比较器,比较器应该怎样写,只要两个表中的时间字段和日期字段相同就不要该行
DataIEnumerable<DataRow> queryDatable = d_info.AsEnumerable().Except(dt.AsEnumerable(),new Comparer());
public class Comparer : EqualityComparer<DataRow>
{
public override bool Equals(DataRow x, DataRow y)
{
if ((x["DataTime"].ToString() == y["DataTime"].ToString()) && (x["CDNO"].ToString() == y["CDNO"].ToString()))
{
return true;
}
else
{
return false;
}
}
public override int GetHashCode(DataRow obj)
{
if (obj==null)
{
return 0;
}
else
{
return obj.ToString().GetHashCode();
}
}
}
你是想得到第一个datatable里面与第2个datatable里面DataTime与CDNO不同的2列?你上面的代码比较出了什么问题
结果出错
@wwwzhang: 应该是第一列与第一列,第2列与第2列,这样去比较了
@稳稳的河: 关键是不会
@稳稳的河: DataTime与CDNO是两个索引,比较索引就知道dr11和dr2是不是相等
@wwwzhang: 调试了下,OK了
class Program { static void Main() { DataTable dt = new DataTable(); dt.Columns.Add("DataTime", typeof(string)); dt.Columns.Add("CDNO", typeof(string)); for (int i = 0; i < 7; i++) { DataRow newRow; newRow = dt.NewRow(); newRow["DataTime"] = i; newRow["CDNO"] = i; dt.Rows.Add(newRow); } DataTable dt1 = new DataTable(); dt1.Columns.Add("DataTime", typeof(string)); dt1.Columns.Add("CDNO", typeof(string)); for (int i = 2; i < 5; i++) { DataRow newRow; newRow = dt1.NewRow(); newRow["DataTime"] = i; newRow["CDNO"] = i; dt1.Rows.Add(newRow); } var queryDatable = dt.AsEnumerable().Except(dt1.AsEnumerable(), new Comparer()); } public class Comparer : EqualityComparer<DataRow> { public override bool Equals(DataRow x, DataRow y) { if ((x["DataTime"].ToString() == y["DataTime"].ToString()) && (x["CDNO"].ToString() == y["CDNO"].ToString())) { return true; } else { return false; } } public override int GetHashCode(DataRow obj) { if (obj==null) { return 0; } else { return obj.ToString().GetHashCode(); } } }