【问题标题】:Fastest way to determine two datatables contain same data?确定两个数据表包含相同数据的最快方法?
【发布时间】:2010-10-15 04:54:42
【问题描述】:

我想验证 2 个数据表是否包含相同的数据(用于单元测试),但不幸的是,Assert.AreEqual 不起作用,似乎每个数据表都包含唯一的元数据,这使得它们的引用不相等。

我该怎么做?

【问题讨论】:

    标签: c# .net unit-testing datatable


    【解决方案1】:

    如果您想知道它们是否不同:

    我会按数据表的键对数据表进行排序,然后同时对两者进行迭代。如果相同位置的键不同,那么您就知道表是不同的。如果键相同,则比较该行的表的其他列。

    如果您想了解它们之间的差异:

    您可能还想看看 DataTable 的 Merge 方法。

    【讨论】:

    • +1 用于提及 Merge 方法。将它与 DataTable.GetChanges 结合起来并检查是否有任何行可以判断是否有任何差异以及它们在哪里。不过,合并的性能可能比简单的循环/Linq 查询更差。
    【解决方案2】:

    鉴于您正在谈论 SQL 服务器,并且您在同一服务器上有 2 个数据库,您可以为每个表运行一个跨数据库 EXCEPT 以获得差异计数,如下所示:

    SELECT COUNT(*) 
    FROM (
        SELECT * FROM database1.dbo.table1
        EXCEPT
        SELECT * FROM database2.dbo.table1
    ) AS diff
    

    我相信这是最快的方法,但我又对你的设置做了很多假设:)

    【讨论】:

    • 这是 T-SQL。他在谈论 DataTables (ADO.NET)
    • @RPM1984:确实,我专注于差异问题并错过了它。它仍然是一个非常好的和快速的替代方案,所以我将它留在这里作为参考。
    • 很公平。虽然这是一个单元测试。如果他正在调用数据库,它将不再是单元测试。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多