4

リモートコンピューターのデータセットに非常に大きなデータセット(1,000,000以上の顧客)があります。このデータはフラットファイルに保存され、ファイルへのオフセットである顧客番号で検索されます。このコレクションへのoDataアクセスを提供したいのですが、単一のエンティティを読み取る機能のみを提供したいと思います。

アクセス許可に関しては、次の方法でWCFを取得して単一の読み取りに制限するのは簡単です。

config.SetEntitySetAccessRule("Customer", EntitySetRights.ReadSingle);

私が抱えている問題は、データセット全体を収集する必要があると思われるIQueryableインターフェイスを返すことを余儀なくされていることです。私が見逃しているものはありますか、またはIQueryableを評価するときに必要なレコードのみを収集する方法がありますか?(oDataパーミッションのために)単一のレコードフェッチが必要になることがわかっていますか?

4

1 に答える 1

1

IQueryable と IEnumerable は大きく異なります。詳しく説明しなくても、IQueryable を使用すると、クエリ プロバイダー (サーバー上) によって実行され、結果 (この場合は単一のエンティティ) のみを返すクエリ式を作成できます。サーバー側でデータセット全体を調べることによる影響は引き続き発生しますが、シナリオでそれを回避する方法がわかりません。

IEnumerable と IQueryable の違いの詳細については、https ://stackoverflow.com/a/252789/981304 の回答を参照してください。具体的には、「...IQueryable は、データベースや Web サービスなどのリモート データ ソースのようなメモリ不足のものを許可します。」

于 2012-06-29T03:08:57.010 に答える