在ADO.NET中比较来自不同db的两个datareader

时间:2014-01-09 01:09:17

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

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

所以我这样做了:

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个对象可以做同样的事情。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

编辑: 假设我们使用产品的“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
    }
  }