3

私は疑問に思っています...私のアプリケーションでは、次のようなことをしています:

var threads = scykDb.Threads
                    .AsQueryable()
                    .Where(condition)
                    .OrderByDescending(t => t.DateCreated)
                    .Skip(threadsToSkip)
                    .Take(threadsPerPage)
                    .Select(t => t)
                    .ToList();

Where() の前に OrderBy() を実行するとどうなりますか? それは重要ですか、skip() や take() はどうですか? それらの位置も重要ですか?

var threads = scykDb.Threads
                    .AsQueryable()
                    .OrderByDescending(t => t.DateCreated)
                    .Where(condition)
                    .Skip(threadsToSkip)
                    .Take(threadsPerPage)
                    .Select(t => t)
                    .ToList();
4

1 に答える 1

8

クエリが実際に Entity Framework、Linq-to-SQL、または別のそのようなプロバイダーを介してデータベースに対して行われている場合、例での呼び出しの順序は重要ではありません。

これがメモリ内コレクションに対して発生している場合は、フィルター処理の前に順序付けを行っているため、最初にフィルターを適用するよりも理想的ではありません。たとえば、破棄する可能性のある要素を並べ替えています。(発注は比較的手間がかかります。にフィルタリングすることで手間が軽減されます。)

とは言うものの、データベースに逆らっても同じコードがメモリ内クエリにも同様に有効であるため、2 番目の形式を支持します。そのため、通常は理想的な方法でコードを記述する習慣を身に付けてください。また、思考プロセスの問題として、注文の前にフィルタリングが行われることを期待することも議論の余地があります.

于 2013-03-15T02:59:42.260 に答える