Если вы хотите отфильтровать строки на месте , то есть отфильтрованные строки должны быть возвращены в в том же DataTable , который был создан с помощью Исходный запрос к базе данных, вы должны сначала очистить коллекцию DataTable.Rows . Затем вы должны скопировать отфильтрованные строки в массив и последовательно добавить их:
ie = ie.Where<DataRow>(row => ids.Contains(row["id"].ToString())).ToArray();
dt.Rows.Clear();
foreach (var row in ie)
{
dt.Rows.Add(row);
}
Альтернативным способом достижения этой цели может быть простое повторение строк в DataTable один раз и удаление тех, которые должны быть отфильтрованы:
foreach (var row in dt.Rows)
{
if (ids.Contains(row["id"].ToString()) == false)
{
row.Delete();
}
}
dt.AcceptChanges();
Обратите внимание, что если DataTable является частью DataSet , который используется для обновления базы данных , все изменения вносятся в DataTable. Строка collection будет отражена в соответствующей таблице базы данных во время обновления.