我有一个多列的数据表(dt),这是DataGridView的源。我试图用值列表过滤这个数据表(dt)
我需要用员工姓名列表过滤下面的DataTable(dt)。EmpList = {'Pete',' allen '}
This is my DataTable
如果你想过滤数据表,你可以使用DefaultView。RowFilter,加入要比较的值的集合,并在比较中使用IN()
运算符:
var names = new[]{ "Allen", "Pete" };
var values = string.Join("', '", names);
dt.DefaultView.RowFilter = $"Employee IN('{values}')";
注意字符串是用逗号和单引号连接的:', '
要删除过滤器,只需将其设置为string.Empty
。
如果你想返回一个新的数据表,你可以使用CopyToDataTable方法:
var dtFiltered = dt.AsEnumerable()
.Where(dr => names.Any(s => s.Equals(dr["Employees"]))).CopyToDataTable();
你也可以把DataTable赋值给它自己:
dt = dt.AsEnumerable().Where(...).CopyToDataTable();
我假设你已经引用了System.Data.DataSetExtensions
,因为你在你的代码中使用AsEnymerable()
。