メモリオブジェクト(データブル)のフィルタリング:
行うことの間には大きな違いがありますか:
var t = dt.Select("id=2");
vs
var g = dt.AsEnumerable().Where(f => f["id"].ToString() == "2");
後者は単なるループであるのに対し、古いものはorのような新しいオブジェクトを作成し、クエリから新しいオブジェクト( ) を返すため、DataTable.Select
より多くのメモリが必要だと思います。ループ内で述語を使用して、何を返すかを決定するだけです。また、遅延実行されるため、結果からたとえば 10 行を取得できます。Enumerable.Where
DataRowCollection
DataTable
DataTable.Select
Select
DataExpression
DataRow[]
Enumerable.Where
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:どちらを使用するか。Datatable.Select() または LINQ?
私の意見では、LINQ は通常、他のほとんどの形式のデータ フィルタリングよりも読みやすく、DataTable.Select を使用するよりも、少なくとも部分的に厳密に型指定されているため、間違いを犯しにくいという利点があります。
行数が多い場合、LINQ は SELECT よりも高速です。行が増え続けると、かなりの違いが見られるはずです。