2014-09-22 30 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