Сравните набор данных или лучшую идею - PullRequest
2 голосов
/ 19 июня 2009

Как сравнить значения одного набора данных с другим.

1-й набор данных ["правильные записи"] поступают с SQL Server с именами столбцов

 [id], [subsNumber]

2-й набор данных ["правильные и неподходящие записи"] поступает из базы данных прогресса, с другими столбцами, кроме 1, который равен subsNumber

Как мне пойти и создать другой набор данных, который имеет все [subsNumber] из ["правильных записей"] с соответствующими записями из 2-го набора данных ["надлежащих записей inproper"]?

или

удалить все записи во 2-м наборе данных ["правильные и неправильные записи"], которые не соответствуют столбцу "subsNumber" в 1-м наборе данных

или любая другая идея

в основном Как получить все записи из 2-го набора данных, который имеет тот же "subsNumber", что и 1-й набор данных

Ответы [ 3 ]

3 голосов
/ 19 июня 2009

Ключ использует System.Data.DataRelation для объединения двух таблиц данных в общем столбце (или столбцах).

Вот некоторый код, полученный из поста на KC 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 голос
/ 22 июня 2009

Я решил проблему:

1-й набор данных -> цикл через и получить subNumber

Вызовите функцию и передайте ей subsNumber и 2nd набор данных -> Затем запустите другой цикл для нового набора данных

Продолжить, если подсчет не совпадает Если значение 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;
     }
0 голосов
/ 19 июня 2009

Чтобы получить все записи из 2-го набора данных, которые соответствуют записям из 1-го набора данных, будет что-то вроде этого:

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

Что-то в этом роде!

...