IQueryable とクエリの遅延読み込み/遅延実行について学んでいます。
この機能を WCF 経由で公開することは可能ですか? クライアントで追加のクエリを実行できる IQueryable を返す LINQ-to-SQL サービスを公開し、最後に .ToList() を使用して実行したいと考えています。このコンテキストで OData 形式はまったく適用できますか?
可能であれば、この手法の用語と、従うことができる優れたチュートリアルは何ですか? ありがとうございました。
IQueryable とクエリの遅延読み込み/遅延実行について学んでいます。
この機能を WCF 経由で公開することは可能ですか? クライアントで追加のクエリを実行できる IQueryable を返す LINQ-to-SQL サービスを公開し、最後に .ToList() を使用して実行したいと考えています。このコンテキストで OData 形式はまったく適用できますか?
可能であれば、この手法の用語と、従うことができる優れたチュートリアルは何ですか? ありがとうございました。
クライアントでLinqクエリを定義できるようにするWCF Data Servicesを確認する必要があります。WCF Data Services は、おそらく要件を満たす唯一のソリューションです。
IQueryable はまだインターフェイスのみであり、機能はインターフェイスを実装する型に依存します。Linq-To-Sql または Linq-To-Entities クエリを直接公開することはできません。短い生存コンテキストやクエリを実行するシリアライゼーションなど、複数の理由があるため、クライアントはクエリの代わりにすべてのオブジェクトのリストを取得します。
私の知る限り、データコンテキストはシリアライズ可能ではありません。つまり、WCF で渡すことはできません。
http://interlinq.codeplex.com/を使用すると、WCF 経由で Linq クエリを送信できます。
WCF Data Services は webHttpBinding でのみ使用でき、すべての Linq クエリを表現できるわけではありません。WCF Data Service の使用時にクエリを記述するのはあまり魅力的ではありません。次のような文字列式が必要です。
.AddQueryOption("$filter", "Id eq 100");
IQuerable<> を WCF 経由で送信できる場合、IQuerable<> は接続文字列のようなものをデータベースに公開する可能性があるため、セキュリティ的には良いことではありません。ただし、以前のコメントのいくつかは有望に思えます。