3

このクエリがあります

 from a in objects
 where a.property1 == 2
 && a.property2 == 3
 select a

from a in objects
where a.property1 == 2
where a.property2 == 3
select a

ステートメントの実行方法に実際の違いがあるかどうか、またどちらかを使用する利点は何かと思っていました

今のところ、私の質問はオブジェクトへのlinqに関するものです

4

3 に答える 3

4

最初のケースは次のように変換されます:

objects.Where(a => a.property1 == 2 && a.property2 == 3);

後者は次のように変換されます。

objects.Where(a => a.property1 == 2).Where(a => a.property2 == 3);

違いは、後者は 2 回フィルター処理されるのに対し、最初のフィルターはラムダで比較を行うことです。

これは、LINQ-to-Object を想定しています。他のプロバイダーは実装に依存します。

于 2013-03-21T19:51:39.190 に答える
0

実際には、C# は AND 演算の左側が true の場合に右側のみを評価するため、2 つのステートメントは同一です。

C# が AND 評価を怠っていなければ、ほとんどの項目が最初の基準を満たさない (または 2 番目の基準が高価な評価である) 場合に、逐次 WHERE 評価によってパフォーマンスが大幅に向上する可能性があります。ただし、現状では、C# はデフォルトで遅延しているため、遅延評価された LINQ と同等のパフォーマンスを発揮します。

于 2013-03-21T19:51:45.623 に答える
0

違いがあるかどうかは、基になる LINQ プロバイダーによって異なります。LINQ プロバイダーは、LINQ クエリを SQL などの基になる関数表現に変換する役割を果たします。

私にとっての本当の違いは読みやすさです。2 つの where ステートメントが連鎖していると、可読性が低下します。

于 2013-03-21T19:51:51.553 に答える