【问题标题】:Comparing two datareaders from different db in ADO.NET在 ADO.NET 中比较来自不同数据库的两个数据读取器
【发布时间】:2014-01-09 01:09:16
【问题描述】:

我有两个不同的数据库,在某些列中具有相同的属性。 我的存储库的目标是获取这些属性并进行比较。

所以我是这样做的:

public sealed class Product
{
    public string BarCode{ get; set; }
    public string CreationDate{ get; set; }
    public string Modifier{ get; set; }
    public string Status { get; set; }
}

public IEnumerable<Product> GetProductsDB1()
{
    //  ADO.NET stuff using DataReader returning a Product List from DB1
}

public IEnumerable<Product> GetProductsDB2()
{
    //  ADO.NET stuff using DataReader returning a Product List from DB2
}

public IEnumerable<Product> Compare()
{
   var db2 = GetProductsDB2()
   var db1 = GetProductsDB1()
   //Comparing both lists here and returning the result list to display in GridView
}

我不确定这是否是最好的方法。我想有任何建议使用正确的概念来做到这一点。因为这种比较很痛苦,而且我有 30 多个对象来比较做同样的事情。

谢谢。

【问题讨论】:

    标签: c# oop design-patterns ado.net


    【解决方案1】:

    您是否希望两个列表中存在相同的产品?如果有,每个产品是否有唯一的标识符?

    如果有可用的唯一标识符,您希望在两个列表之间进行连接(在这种情况下为完全外部连接,包含每个列表中的所有记录)。

    编辑: 假设我们正在使用产品的属性“CodeBar”,您可以使用如下代码进行比较:

    
      var tJoined = db1.Join(db2, 
        list1Product => list1Product.CodeBar,
        list2Product => list2Product.CodeBar,
        (list1Product, list2Product) => new { Product1 = list1Product, Product2 = list2Product }
      );
    
      foreach(var tProductComparision in tJoined) {
        if(tProductComparison.Product1.PropertyOfInterest != tProductComparison.Product2.PropertyOfInterest) {
          //do something here
        }
      }
    

    【讨论】:

    • 没有唯一标识符。是的,这些产品存在于同一个列表中。
    • 那你希望做什么比较?
    • 在处理工作流中,在这两个第三部分db中同时添加产品,但有时数据损坏,值不一样。所以我需要检查并显示。
    • 对,但是您打算如何确保比较每个列表中的正确产品?
    • 例如,在这种情况下,我有 CodeBar,它将是唯一标识符。
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多