您可以使用 Linq 过滤并可能创建一个新的 DataTable。
var filtered =
table.AsEnumerable()
.Where(r => list.Contains(r.Field<int>("ID")))
.CopyToDataTable();
给定一个包含 { 1, 2 } 的列表,过滤后的表将包含行 { { 1, "abc" }, { 2, "xxx" } }
旁注:虽然您可以使用 ArrayLists,但最好在用 .NET 编写的新代码中使用通用对应 System.Collections.Generic.List<T>。泛型是作为 .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();