我想过滤DataView
,但DV.Rowfilter
花了太多时间。
dv.RowFilter = "ProductName like '%" + searchtxt + "%'";
所以我决定使用LINQ,但是如何在LINQ中实现之类查询?
答案 0 :(得分:0)
LINQ的效率通常不高,但它可以提高可读性和可维护性。
所以你可以尝试Linq-To-DataSet
:
var query = from row in dv.Table.AsEnumerable()
let productName = row.Field<string>("ProductName")
where productName.Contains(searchtxt)
select row;
DataTable tbl = query.CopyToDataTable(); // use this as DataSource or use tbl.DefaultView
这与方法语法相同:
var query = dv.Table.AsEnumerable()
.Where(row => row.Field<string>("ProductName").Contains(searchtxt));
MSDN: Creating a DataView Object with LINQ to DataSet
我已经尝试了你的第二个解决方案,但现在它抛出了异常 “源不包含DataRows。”实际上我是
DataTable
make as DataTable.AsEnumerable(),它有行
该表包含行,但过滤器会跳过所有行。
您可以使用if(query.Any()){...}
检查是否有行:
DataTable tbl = dv.Table.Clone(); // creates an empty table with the same columns
if(query.Any())
tbl = query.CopyToDataTable();