DataView上的ASP.net LINQ使用Like查询

时间:2014-09-22 07:12:53

标签: linq linq-to-sql dataview

我想过滤DataView,但DV.Rowfilter花了太多时间。

dv.RowFilter = "ProductName like '%" + searchtxt + "%'";

所以我决定使用LINQ,但是如何在LINQ中实现之类查询?

1 个答案:

答案 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();