过滤内存对象(数据表):
这样做之间是否有很大不同:
var t = dt.Select("id=2");
对比
var g = dt.AsEnumerable().Where(f => f["id"].ToString() == "2");
我假设它DataTable.Select
需要更多的内存,Enumerable.Where
因为后者只是一个循环,DataRowCollection
而DataTable
旧的DataTable.Select
创建新的对象,比如Select
or DataExpression
,它甚至DataRow[]
从查询中返回新的对象()。Enumerable.Where
只需在循环中使用谓词来确定要返回的内容。它也是惰性执行的,所以你可以从结果中取 10 行。
var rows = dt.AsEnumerable()
.Where(row => row.Field<int>("id") == 2)
.Take(10); // not possible with DataTable.Select
两者都是内存查询,所以差别不大。
我会选择更易读、更强大、更易于维护以及强类型(Field
扩展)Linq-To-DataTable
:.
我建议你通过 ASP.net 论坛线程 - DataTable.Select Vs DataTable.AsEnumerable().FirstOrDefault
来自:使用哪一个;Datatable.Select() 还是 LINQ?
在我看来,LINQ 通常比几乎任何其他形式的数据过滤更容易阅读,并且比使用 DataTable.Select 具有优势,至少部分是强类型的,因此更难出错。
对于大量行,LINQ 比 SELECT 快,当行数不断增加时,您应该会看到相当大的差异。