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