使用ArrayList过滤DataTable

时间:2012-02-10 03:00:28

标签: asp.net filter datatable arraylist

我有一个独特ID的数组列表

ex 1,2,3,4....

以及包含上述ID的记录的DataTable

ID    Name
1     abc
2     xxx
3     aaa
4     bbb
5     eee
6     fff

我需要按照数组列表内容过滤数据表

ex: if array list contain 1,2

那么DataTable应该只被过滤以包含那两个记录。除了在For循环中运行DataTable并获取每个DataRow之外,DataTable上还有任何选项吗?

1 个答案:

答案 0 :(得分:3)

您可以使用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();
相关问题