2014-09-22 64 views

回答

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


我已經試過你的第二個解決方案,但現在它拋出了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(); 
+0

@Jumbo:不客氣。但答案有幫助,它更有效率嗎?如果沒有,也許你有太多的行,你應該減少你加載到內存中的行(f.e。sql-paging)。如果是,請考慮接受答案。 – 2014-09-22 09:22:07

+0

THanx爲你的答覆,但冷杉解決方案不工作,其例外爲「不能使用投影后創建DataView」。 我也嘗試了第二次,但它沒有得到任何記錄。 請您告訴我另一種解決方案嗎? – Jumbo 2014-09-22 09:28:41

+0

@Jumbo:然後嘗試使用'DataTable'來代替。我編輯了我的答案。如果你需要'DataView',你可以使用'tbl.DefaultView'。 – 2014-09-22 09:31:44