4

質問がありlinq to entityます。

Any()linqの実行を強制しますか(のようToList() に)?

4

4 に答える 4

13

LINQ のすべての標準演算子について説明している非常に優れた MSDN 記事の実行方法による標準クエリ演算子の分類があります。表からわかるように、Anyすぐに実行されます (単一の値を返すすべての演算子として)。オペレーターの実行方法に疑問がある場合は、いつでもこの表を参照できます。

于 2013-02-05T07:52:37.710 に答える
2

Yes, and no. The any method will read items from the source right away, but it's not guaranteed to read all items.

The Any method will enumerate items from the source, but only as many as needed to determine the result.

パラメーターがない場合、Anyメソッドはソースから最初の項目のみを読み取ろうとします。

パラメーターを使用すると、Anyメソッドは、条件を満たすアイテムが見つかるまで、ソースからのみアイテムを読み取ります。すべてのアイテムは、最後のアイテムまで条件を満たすアイテムがない場合にのみ、ソースから読み取られます。

于 2013-02-05T07:55:01.803 に答える
1

これは簡単にわかります。Any() は単純な bool を返します。bool は常に bool であり、カスタム実装を持つことができる IQueryable または IEnumerable (またはその他の型) ではないため、Any() 自体が返す boolean 値を計算する必要があると結論付けなければなりません。

もちろん、Any() が IQueryable のサブクエリ内で使用されている場合は例外です。この場合、Linq プロバイダーは通常、Any() への呼び出しの存在を分析し、対応する SQL に変換します (たとえば)。

于 2013-02-05T07:47:37.470 に答える
1

簡単な質問、簡単な答え: はい、そうです。

リストの任意の要素が指定された条件に一致するかどうか (または要素が存在するかどうか) を調べるには、リストを列挙する必要があります。MSDNの状態として:

このメソッドは、コレクションの要素を 1 つも返しません。代わりに、コレクションに要素が含まれているかどうかを判断します。 ソースの列挙は、結果が決定されるとすぐに停止されます。

このメソッドは別の ではなく、列挙の結果を配信するため、ここでは遅延実行は適用されませんIEnumerable

于 2013-02-05T07:48:52.260 に答える