0
我想过滤一个DataView
但DV.Rowfilter
花费的时间太多。关于DataView的ASP.net LINQ使用Like查询
dv.RowFilter = "ProductName like '%" + searchtxt + "%'";
所以我决定使用LINQ,但如何实现上述像LINQ查询?
我想过滤一个DataView
但DV.Rowfilter
花费的时间太多。关于DataView的ASP.net LINQ使用Like查询
dv.RowFilter = "ProductName like '%" + searchtxt + "%'";
所以我决定使用LINQ,但如何实现上述像LINQ查询?
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
我已经试过你的第二个解决方案,但现在它抛出了excep “源不包含DataRows。” “而实际上
DataTable
我 作出DataTable.AsEnumerable(),它有它
行的表中包含行,但过滤器跳过所有的人。
你可以使用if(query.Any()){...}
,以检查是否有行:
DataTable tbl = dv.Table.Clone(); // creates an empty table with the same columns
if(query.Any())
tbl = query.CopyToDataTable();
@Jumbo:不客气。但答案有帮助,它更有效率吗?如果没有,也许你有太多的行,你应该减少你加载到内存中的行(f.e。sql-paging)。如果是,请考虑接受答案。 – 2014-09-22 09:22:07
THanx为你的答复,但冷杉解决方案不工作,其例外为“不能使用投影后创建DataView”。 我也尝试了第二次,但它没有得到任何记录。 请您告诉我另一种解决方案吗? – Jumbo 2014-09-22 09:28:41
@Jumbo:然后尝试使用'DataTable'来代替。我编辑了我的答案。如果你需要'DataView',你可以使用'tbl.DefaultView'。 – 2014-09-22 09:31:44