Вы можете использовать Linq для фильтрации и создания нового DataTable.
var filtered =
table.AsEnumerable()
.Where(r => list.Contains(r.Field<int>("ID")))
.CopyToDataTable();
Учитывая список, содержащий {1, 2}, отфильтрованная таблица будет содержать строки {{1, "абв"}, {2, "ххх"}}
Side Примечание: В то время как вам может использовать ArrayLists, предпочтительнее использовать общий аналог System.Collections.Generic.List<T>
в новом коде, написанном на .NET. Дженерики были представлены как часть .NET 2.0/C# 2.0/VB 8/Visual Studio 2005. Настоящими изданиями на рынке являются .NET 4.0/C# 4.0/VB 10/Visual Studio 2010. ArrayLists фактически устарели, за исключением случаев, когда поддерживающий код, созданный в более ранних версиях langauge и framework.
Кроме того, если список особенно велик, его можно было бы сначала загрузить в HashSet<T>
перед запросом, так как он будет более эффективным при использовании метода Contains.
Полный рабочий код демонстрации:
var table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "abc");
table.Rows.Add(2, "xxx");
table.Rows.Add(3, "aaa");
table.Rows.Add(4, "bbb");
table.Rows.Add(5, "eee");
table.Rows.Add(6, "fff");
// var list = new ArrayList(); // do not prefer
var list = new List<int>();
list.Add(1);
list.Add(2);
var filtered =
table.AsEnumerable()
.Where(r => list.Contains(r.Field<int>("ID")))
.CopyToDataTable();
я получаю исключение - "Источник не содержит DataRows." но все же DataTable имеет идентификаторы в ArrayList – chamara
Эта ошибка возникает только в том случае, если исходная таблица не имеет строк * или * ни один из них не передает предикат в том месте. Таким образом, либо ваша исходная таблица пуста, либо не соответствует значениям в вашем списке. Вам придется отлаживать, чтобы проверить. Я публикую полный фрагмент кода, чтобы продемонстрировать рабочее поведение. –
, как вы упомянули, я начал использовать Список, теперь он работает. Согласно описанному выше методу фильтрации, для фильтрационного кода DataTable требуются целые элементы в списке. Thanx для справки. –
chamara