数据表过滤:linq vs filter?

Roy*_*mir 6 .net linq datatable

过滤内存对象(datatble):

这样做有很大的不同:

    var t = dt.Select("id=2");
Run Code Online (Sandbox Code Playgroud)

VS

    var g = dt.AsEnumerable().Where(f => f["id"].ToString() == "2");
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 9

我认为DataTable.Select需要更多的内存比Enumerable.Where,因为后者只是在一个循环DataRowCollectionDataTable,而老DataTable.Select会建立像新对象SelectDataExpression它甚至返回新对象(DataRow[]从查询).Enumerable.Where只需在循环中使用谓词来确定返回的内容.它也是懒惰地执行,所以你可以从结果中取10行.

var rows = dt.AsEnumerable()
             .Where(row => row.Field<int>("id") == 2)
             .Take(10); // not possible with DataTable.Select
Run Code Online (Sandbox Code Playgroud)

两者都是内存中的查询,所以没有太大的区别.

我会选择什么是更具可读性,功能强大,maintanable也强类型(Field扩展): Linq-To-DataTable.

  • asEnumerable由itslef返回`EnumerableRowCollection <DataRow>(source);`和`select`也返回一个新的`WhereSelectEnumerableIterator`所以****(datatable.select和Linq)返回新对象....听起来像你的回答说只有`DataTable.Select`返回新对象. (2认同)