C# 比较数据集还是一个更好的主意

C# 比较数据集还是一个更好的主意,c#,linq,ado.net,.net-2.0,dataset,C#,Linq,Ado.net,.net 2.0,Dataset,如何将一个数据集的值与另一个数据集的值进行比较 第一个数据集[“正确记录”]来自具有列名的SQL Server [id], [subsNumber] 第二个数据集[“正确和不正确的记录”]来自进度数据库,除了第1列是子编号 如何制作另一个数据集,该数据集包含来自[“正确记录”]的所有[subsNumber],以及来自第二个数据集[“正确的不正确记录”]的匹配记录 或 删除第二个数据集中与第一个数据集中的“子编号”列不匹配的所有记录[“正确和不正确记录”] 或任何其他想法 基本上,我如何从第二

如何将一个数据集的值与另一个数据集的值进行比较

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

 [id], [subsNumber]
第二个数据集[“正确和不正确的记录”]来自进度数据库,除了第1列是
子编号

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

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

或任何其他想法


基本上,我如何从第二个数据集中获取与第一个数据集具有相同“子编号”的所有记录?要从第二个数据集中获取与第一个数据集中的记录相匹配的所有记录,如下所示:

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


沿着这些路线的东西

该键使用System.Data.DataRelation将两个数据表连接到一个公共列(或多个列)

下面是一些源于

公共DataTable GetImproperRecords(DataTable属性记录,DataTable ImproperRecords){
DataTable relatedTable=新的DataTable(“差异”);
试一试{
使用(数据集=新数据集()){
dataSet.Tables.AddRange(新数据表[]{ProperRecords.Copy(),ImproperRecords.Copy()});
DataColumn properColumn=新DataColumn();
PropertColumn=dataSet.Tables[0]。列[1];//假设子编号位于索引1
DataColumn improperColumn=新DataColumn();
improperColumn=dataSet.Tables[1]。Columns[0];//假设子编号位于索引0处
//创建数据关系
DataRelationship=新的DataRelationship(string.Empty、PropertColumn、improperColumn、false);
dataSet.Relations.Add(关系);
//为return relatedTable创建列
for(int i=0;i0)
relatedTable.LoadDataRow(parentrow.ItemArray,true);
}
relatedTable.EndLoadData();
}
}
捕获(例外情况除外){
控制台写入线(例如消息);
}
返回相关表;
}
我解决了这个问题:

第一个数据集-->循环遍历并获取子数据集编号

调用函数并将子编号和第二个数据集-->传递给它 然后为新数据集启动另一个循环

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

代码:

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