Удалить строки из DataTable, которые не существуют в списке - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть динамический список, который содержит имена столбцов

 var newList = new List<string>(){ "ColName1", "ColName2", "ColName3", "ColName4" };

У меня также есть таблица данных с этими именами столбцов.Однако этот набор данных должен соответствовать моему списку, поэтому, если в этом массиве данных есть столбцы, которых нет в списке, его необходимо удалить.Как я могу это сделать?Пока это то, что у меня есть

      DataTable sourceData = new DataTable();
      List<DataRow> rowsToDelete = new List<DataRow>();

                foreach (DataRow row in sourceData.Rows)
                {
                    if (!newList.Contains(row[""].ToString())) //Errors here as the names cannot be hardcoded. It needs to be dynamic
                    {
                        rowsToDelete.Add(row);
                    }
                }

                foreach (DataRow row in rowsToDelete)
                {
                    sourceData.Rows.Remove(row);
                }

                sourceData.AcceptChanges();

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Я не уверен, почему вы проверяете, существуют ли столбцы на DataRow, они определены на DataTable, но это будет работать:

if (row.Table.Columns.Cast<DataColumn>().Any(x => !newList.Contains(x.ColumnName)))
{
    rowsToDelete.Add(row);
}
0 голосов
/ 04 апреля 2019

Вы можете просто удалить их как:

foreach(string col in newList)
    if(sourceData.Columns.Contains(col))
         sourceData.Columns.Remove(col);

Но, тем не менее, лучше не включать их в ваш запрос:

string query = $"select {string.Join(",", newList)} from someTable";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...