6

过滤内存对象(数据表):

这样做之间是否有很大不同:

    var t = dt.Select("id=2");

对比

    var g = dt.AsEnumerable().Where(f => f["id"].ToString() == "2");
4

2 回答 2

9

我假设它DataTable.Select需要更多的内存,Enumerable.Where因为后者只是一个循环,DataRowCollectionDataTable旧的DataTable.Select创建新的对象,比如Selector 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:.

于 2013-01-07T08:30:16.887 回答
3

我建议你通过 ASP.net 论坛线程 - DataTable.Select Vs DataTable.AsEnumerable().FirstOrDefault

来自:使用哪一个;Datatable.Select() 还是 LINQ?

在我看来,LINQ 通常比几乎任何其他形式的数据过滤更容易阅读,并且比使用 DataTable.Select 具有优势,至少部分是强类型的,因此更难出错。

对于大量行,LINQ 比 SELECT 快,当行数不断增加时,您应该会看到相当大的差异。

于 2013-01-07T08:32:46.550 回答