6

メモリオブジェクト(データブル)のフィルタリング:

行うことの間には大きな違いがありますか:

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

vs

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

2 に答える 2

9

後者は単なるループであるのに対し、古いものはorのような新しいオブジェクトを作成し、クエリから新しいオブジェクト( ) を返すため、DataTable.Selectより多くのメモリが必要だと思います。ループ内で述語を使用して、何を返すかを決定するだけです。また、遅延実行されるため、結果からたとえば 10 行を取得できます。Enumerable.WhereDataRowCollectionDataTableDataTable.SelectSelectDataExpressionDataRow[]Enumerable.Where

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

From:どちらを使用するか。Datatable.Select() または LINQ?

私の意見では、LINQ は通常、他のほとんどの形式のデータ フィルタリングよりも読みやすく、DataTable.Select を使用するよりも、少なくとも部分的に厳密に型指定されているため、間違いを犯しにくいという利点があります。

行数が多い場合、LINQ は SELECT よりも高速です。行が増え続けると、かなりの違いが見られるはずです。

于 2013-01-07T08:32:46.550 に答える