【问题标题】:Data table diff based on multiple columns基于多列的数据表差异
【发布时间】:2018-07-25 13:51:41
【问题描述】:

我试图根据多列找出两个数据表之间的差异。我已经设法根据一列(如下)做到了:

//return all rows in dt1 but not in dt2 based on column name

public DataTable GetTableDiff(DataTable dt1, DataTable dt2, string sColumn)
{
    DataTable dtDiff = new DataTable();
    try
    {
        var diff = from r1 in dt1.AsEnumerable()
                    join r2 in dt2.AsEnumerable()
                        on r1.Field<string>(sColumn).Trim().ToLower()
                        equals r2.Field<string>(sColumn).Trim().ToLower() into g
                    where !g.Any() // get only rows which do not have joined rows from dt2
                    select r1;

        dtDiff = diff.CopyToDataTable();
    }
    catch (Exception ex)
    {
    }
    return dtDiff;
}

【问题讨论】:

  • 您可以创建一个 IComparable 并将其与 Linq 除外。
  • 应该是 IEqualityComparer。

标签: c# linq datatable


【解决方案1】:

一种方法是使用简单的比较,即:

var diff = from r1 in dt1.AsEnumerable()
     where !dt2.AsEnumerable()
               .Any( r2 => r1.Field<string>("col1") == r2.Field<string>("col1Inr2") ||
                           r1.Field<string>("col2") == r2.Field<string>("col2Inr2"))
     select r1;

但是,根据实际需要,您可以使用 IEqualityComparer 创建更好的方法。样品check my blog sample.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多