IQueryable<T>
定義をカプセル化し、保存して再利用するか、後でより大きなクエリに埋め込む式があるとします。例えば:
IQueryable<Foo> myQuery =
from foo in blah.Foos
where foo.Bar == bar
select foo;
これで、その myQuery オブジェクトを保持して、説明したように使用できると思います。しかし、私がよくわからないことがいくつかあります:
どのようにパラメータ化するのが最善ですか? 最初にこれをメソッドで定義し、メソッド
IQueryable<T>
の結果として を返しました。blah
このようにして、メソッドの引数としてandを定義でき、毎回bar
新しいものを作成するだけだと思います。IQueryable<T>
これは、のロジックをカプセル化する最良の方法IQueryable<T>
ですか? 他の方法はありますか?クエリが ではなくスカラーに解決される場合はどうなり
IQueryable
ますか? たとえば、このクエリを表示どおりにしたいが.Any()
、一致する結果があったかどうかを知らせるだけにしたい場合はどうすればよいでしょうか? を追加する(...).Any()
と、結果がbool
すぐに実行されますよね?これらのQueryable
演算子 (Any
、SindleOrDefault
など) をすぐに実行せずに利用する方法はありますか? LINQ-to-SQL はこれをどのように処理しますか?
編集:パート 2 は、 と の制限の違いを理解しようとすることに関するものIQueryable<T>.Where(Expression<Func<T, bool>>)
ですIQueryable<T>.Any(Expression<Func<T, bool>>)
。実行が遅れる大きなクエリを作成する場合、後者はそれほど柔軟ではないようです。を追加してから、他のWhere()
構成を後で追加して、最後に実行することができます。はスカラー値を返すためAny()
、残りのクエリを作成する前にすぐに実行されるように聞こえます。