筛选内存对象(数据表):
和
有很大的区别吗? var t = dt.Select("id=2");
和
var g = dt.AsEnumerable().Where(f => f["id"].ToString() == "2");
我认为DataTable.Select
需要比Enumerable.Where
更多的内存,因为后者只是DataTable
的DataRowCollection
上的循环,而旧的DataTable.Select
创建新对象,如Select
或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
From: Which one to use;Datatable.Select()或LINQ?
在我看来,LINQ通常比其他语言更容易阅读其它形式的数据过滤与使用相比具有优势数据表。选择被,至少部分地,强类型制作更不容易犯错。
LINQ在大量行时比SELECT快,当行数不断增加时,您应该会看到相当大的差异。