LINQ では、拡張メソッドの順序が必ずしも期待どおりのパフォーマンスに影響するわけではありません。直観に反しますが、Where
を FirstOrDefault
の前に配置しても、必ずしもパフォーマンスが向上するとは限りません。
LINQ の実行を理解する
LINQ 拡張メソッドは遅延実行されます。つまり、操作はすぐには実行されません。代わりに、潜在的な結果を含む列挙可能なシーケンスを返します。シーケンスを反復する場合、必要に応じて操作が実行されます。
どこと FirstOrDefault
Where
は述語に基づいてシーケンスをフィルター処理し、FirstOrDefault
は最初に一致した要素を返します。多くの場合、取得する前にフィルタリングした方が効率的であると考えられます (つまり、Where
の前に FirstOrDefault
を実行する)。
実際の状況
ただし、Where
と FirstOrDefault
の場合、Where
は一致するすべての要素を反復する必要はありません。最初の一致を見つけてすぐに返す必要があるだけです。したがって、 Where
はオンデマンドで動作し、一致する要素はすべて FirstOrDefault
を適用する前に保持されないため、これらのメソッドの順序はパフォーマンスに影響しません。
アナロジー
この概念を説明するために、人がトランプのデッキから特定のカードを探している状況を考えてみましょう。レッドカードを探している人は、レッドカードが見つかるまでカードをめくり続けるだけで済みます。最初の赤いカードを見つける前に、デッキ全体を調べてすべてのカードを色ごとに分類する必要はありません。
結論
要約すると、LINQ 式内の Where
と FirstOrDefault
の順序はパフォーマンスに大きな影響を与えません。これは、Where
が遅延実行され、FirstOrDefault
の位置に関係なく、最初に一致する要素のみを見つける必要があるためです。
以上がLINQ の「FirstOrDefault」の前にある「Where」は本当にパフォーマンスを向上させますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。