【问题标题】:Compare dataset or a better idea比较数据集或更好的想法
【发布时间】:2010-11-04 03:13:48
【问题描述】:

如何比较一个数据集与另一个数据集的值。

第一个数据集 ["proper records"] 来自 SQL Server 的列名

 [id], [subsNumber]

第二个数据集 ["proper and inproper records"] 来自进度数据库,除了 1 之外的其他列是 subsNumber

如何制作另一个数据集,其中包含来自 ["proper records"] 的所有 [subsNumber] 与来自 2nd datset ["proper inproper records"] 的匹配记录?

删除第二个数据集中所有与第一个数据集中的“subsNumber”列不匹配的记录[“正确和不正确的记录”]

或任何其他想法

基本上我如何从与第一个数据集具有相同“subsNumber”的第二个数据集中获取所有记录

【问题讨论】:

    标签: c# linq ado.net .net-2.0 dataset


    【解决方案1】:

    关键是使用 System.Data.DataRelation 将您的 2 个数据表连接到一个(或多个)公共列上。

    这是来自KC's See Sharp Blog的帖子的一些代码

    public DataTable GetImproperRecords(DataTable ProperRecords, DataTable ImproperRecords) {
      DataTable relatedTable = new DataTable("Difference");
      try {
         using (DataSet dataSet = new DataSet()) {
            dataSet.Tables.AddRange(new DataTable[] { ProperRecords.Copy(), ImproperRecords.Copy() });
    
            DataColumn properColumn = new DataColumn();
            properColumn = dataSet.Tables[0].Columns[1]; // Assuming subsNumber is at index 1
    
            DataColumn improperColumn = new DataColumn();
            improperColumn = dataSet.Tables[1].Columns[0]; // Assuming subsNumber is at index 0
    
            //Create DataRelation
            DataRelation relation = new DataRelation(string.Empty, properColumn, improperColumn, false);
    
            dataSet.Relations.Add(relation);
    
            //Create columns for return relatedTable
            for (int i = 0; i < ImproperRecords.Columns.Count; i++) {
               relatedTable.Columns.Add(ImproperRecords.Columns[i].ColumnName, ImproperRecords.Columns[i].DataType);
            }
    
            relatedTable.BeginLoadData();
    
            foreach (DataRow parentrow in dataSet.Tables[1].Rows) {
               DataRow[] childrows = parentrow.GetChildRows(relation);
    
               if (childrows != null && childrows.Length > 0)
                  relatedTable.LoadDataRow(parentrow.ItemArray, true);
    
            }
    
            relatedTable.EndLoadData();
    
         }
      }
      catch (Exception ex) {
         Console.WriteLine(ex.Message);
      }
    
      return relatedTable;
    }
    

    【讨论】:

      【解决方案2】:

      我解决了这个问题:

      第一个数据集--> 循环并获取 subsNumber

      调用函数并将 subsNumber 和第二个数据集传递给它 然后为新数据集开始另一个循环

      如果子编号不匹配则继续 如果 subsNumber 匹配该数据,例如将列添加到 sqlserver 表等。

      代码:

       foreach (DataRow row in ecommDS.Tables["EcommData"].Rows)
       {           
           //string statCode = ""
           string prdCode = ""; //declaring var for getting string format from ecomm
           string checking = "";
           prdCode = row["PRD-CDE"].ToString();
           checking = row["SUBS-NUM"].ToString();
      
           if(checking != subsNum)
           {
               continue;
           }
      

      【讨论】:

        【解决方案3】:

        要从第二个数据集中获取与第一个数据集的记录匹配的所有记录,如下所示:

        IEnumerable list3 = list2.Where(l2=>list1.Contains(l1=>l1.subsNumber == l2.subsNumber));

        类似的东西!

        【讨论】:

          猜你喜欢
          • 2023-03-07
          • 1970-01-01
          • 2018-01-30
          • 1970-01-01
          • 2017-08-31
          • 2013-12-26
          • 2018-11-12
          • 2012-05-31
          • 1970-01-01
          相关资源
          最近更新 更多