比较数据集或更好的主意

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

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

[id], [subsNumber] 

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

如何使用来自[“正确记录”]的所有[subsNumber]另一个数据集与来自第二个数据集[“正确的不正确记录”]的匹配记录?

要么

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

或任何其他想法

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

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

这里有一些代码来源于KC的See Sharp博客

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

我解决了这个问题:

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

调用函数并将subsNumber和2nd数据集 – >传递给它然后为新数据集启动另一个循环

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

要从第二个数据集中获取与第一个数据集中的记录匹配的所有记录,可能是这样的:

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

沿着那条线的东西!