比较数据集或更好的主意

时间:2009-06-18 20:07:12

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

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

第一个数据集 [“正确记录”]来自SQL Server,列名为

 [id], [subsNumber]

第二个数据集 [“正确和不合适的记录”]来自进度数据库,除了1 subsNumber之外的其他列

如何制作另一个数据集,其中包含来自[“正确记录”]的所有[subsNumber]以及来自第二个数据集[“正确的不正确记录”]的匹配记录?

删除第2个数据集中的所有记录[“正确和不正确的记录”],这些记录与第1个数据集中的“subsNumber”列不匹配

或任何其他想法

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

3 个答案:

答案 0 :(得分:3)

关键是使用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;
}

答案 1 :(得分:1)

我解决了这个问题:

第一个数据集 - &gt;循环throuhg并获取subsNumber

调用函数并传递subsNumber和2nd数据集 - &gt;它 然后为新数据集

启动另一个循环

如果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;
     }

答案 2 :(得分:0)

要从第2个数据集中获取与第1个数据集中的记录匹配的所有记录,请执行以下操作:

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

这些方面的东西!