Данные, возвращаемые пустыми

#c# #datatable

Вопрос:

Для моего приложения есть несколько отдельных таблиц данных, и мне нужно создать новую таблицу данных на основе соответствующих идентификаторов. Мне нужно выполнить этот процесс несколько раз, поэтому я создал функцию, чтобы не дублировать код, я сделал это так:

 private static DataTable CloneTable(DataTable originalTable, DataTable newTable, DataTable targetTable,  string addedColumn, string columnToExtract, bool multipleConditions = false, string secondColumnName = null, string secondColumnConditon= null)  {   newTable = originalTable.Clone();  newTable.Columns.Add(addedColumn);   foreach (DataRow row in originalTable.Rows)  {   DataRow[] rowsTarget;   if (multipleConditions == false)  {  rowsTarget = targetTable.Select(string.Format("ItemId='{0}'", Convert.ToString(row["ItemId"])));  } else  {  rowsTarget = targetTable.Select(string.Format("ItemId='{0}' AND {1} ='{2}'", Convert.ToString(row["ItemId"]), secondColumnName, secondColumnConditon));  }    if (rowsTarget != null amp;amp; rowsTarget.Length gt; 0)  {  string data = rowsTarget[0][columnToExtract].ToString();  var lst = row.ItemArray.ToList();  lst.Add(data);  newTable.Rows.Add(lst.ToArray());  }   else  {  string data = "";  var lst = row.ItemArray.ToList();  lst.Add(data);  newTable.Rows.Add(lst.ToArray());  }   }   return newTable;   }  

Затем я вызываю это в отдельной функции, например:

 private DataTable GetExtractData()  {  .........................   DataTable includeLastModified = new DataTable();  DataTable includeFunction = new DataTable();  DataTable includeDiscipline = new DataTable();    CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");  CloneTable(includeLastModified, includeFunction, customPropertiesTable, "Function", "ItemTitle", true, "Title", "Function");  CloneTable(includeFunction, includeDiscipline, customPropertiesTable, "Discipline", "ItemTable", true, "Title", "Discipline");  return includeDiscipline;   }  

Проблема, с которой я сталкиваюсь, заключается в том, что данные здесь возвращаются пустыми, и я не уверен, почему. В моей функции CloneTable я сделал следующее, чтобы убедиться, что новая таблица не пуста:

 foreach (DataRow row in newTable.Rows)  {  foreach (var item in row.ItemArray)  {  Console.WriteLine(item);  }  }  

Он не пуст, поэтому я не уверен, почему, когда я возвращаю его в отдельной функции, он теперь пуст?

Я вызываю то же самое, но для таблицы includeDiscipline в функции getData, но она возвращается пустой.

Ошибок нет, но появляется и исчезает сообщение о том, что параметр «NewTable» может быть удален, так как начальное значение не используется. Я не уверен, как это может быть, хотя, поскольку это явно используется?

Я предполагаю, что, вероятно, именно так я вызываю функцию, но я действительно не уверен, что я сделал здесь неправильно

Ответ №1:

Ладно, момент с ладонью на лице, просто понял, что забыл кое — чему ее присвоить.

Так что, если я сделаю что-то вроде:

 var test = CloneTable(itemsTable, includeLastModified, lastModifiedTable, "LastModifiedDate", "LastModifiedDate");   return test;  

Он отлично работает и больше не возвращается пустым