【问题标题】:compare two datatable and get differences比较两个数据表并获得差异
【发布时间】:2020-12-20 21:26:17
【问题描述】:

我有两个数据表,我想根据不同的列来获取这两个数据库之间的差异,并将它们复制到另一个数据表中。

例如

数据表 1

Code Name Age Money
123 User1 25 68000.00
456 User2 32 23000.00
963 User3 56 75000.00
852 User4 29 13000.00

数据表 2

Code Name Age Money
963 User3 56 75000.00
456 User2 32 26000.58
123 User1 25 59000.63
852 User4 29 13000.00
741 UserN 22 15000.56

数据表结果

Code Name Age Money
456 User2 32 26000.58
123 User1 25 59000.63
741 UserN 22 15000.56

我使用了这段代码,但它没有显示正确的结果

dtr = (from r in dt1.AsEnumerable()
                   where !dt2.AsEnumerable().Any(r2 => r[3].ToString().Trim() == r2[3].ToString().Trim())
                   select r).CopyToDataTable();

【问题讨论】:

    标签: c# datatable compare


    【解决方案1】:

    您可以使用Linq和Except来确定:

    The set difference of two sets is defined as the members of the first set that don't appear in the second set.

    在示例中,我将行投影到匿名类型,然后执行“除外”设置操作以获得结果:

    var dtrows = dt1.AsEnumerable().Select(rw => new { Code = rw[0], Name = rw[1], Age = rw[2], Money = rw[3] });
    var dt2rows = dt2.AsEnumerable().Select(rw => new { Code = rw[0], Name = rw[1], Age = rw[2], Money = rw[3] });
    
    dt2rows.Except(dtrows)
    

    【讨论】:

    • 不是一个好的解决方案。年龄列可能会改变。我只想显示基于金钱列或其他列的结果
    • @phpDeveloper 然后是两件事。您应该在问题中说,其次,只需从投影中排除年龄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2013-04-27
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多