数据表过滤:linq vs filter



筛选内存对象(数据表):

有很大的区别吗?
    var t = dt.Select("id=2");

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

我认为DataTable.Select需要比Enumerable.Where更多的内存,因为后者只是DataTableDataRowCollection上的循环,而旧的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

都是内存查询,所以没有太大的区别。

我会选择可读性更强,功能更强大,可维护,并且也是强类型的(Field扩展):Linq-To-DataTable .

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

From: Which one to use;Datatable.Select()或LINQ?

在我看来,LINQ通常比其他语言更容易阅读其它形式的数据过滤与使用相比具有优势数据表。选择被,至少部分地,强类型制作更不容易犯错。

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

最新更新