Вы можете использовать Linq для фильтрации и, возможно, создать новый DataTable.
var filtered =
table.AsEnumerable()
.Where(r => list.Contains(r.Field<int>("ID")))
.CopyToDataTable();
Учитывая список, содержащий {1, 2}, отфильтрованная таблица будет содержать строки {{1, "abc"}, {2, "xxx"}}
Сторонапримечание: хотя вы можете использовать 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 фактически устарели, за исключением случая споддержка кода, созданного в более ранних версиях языка и инфраструктуры.
Кроме того, если список особенно велик, возможно, стоит сначала загрузить его в 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();