0

というメソッドで大量のデータを返すだけの Web サービスがありますGetAll()

すべてのデータが必要ない場合はどうすればよいですか? クエリまたはいくつかの基準に基づいて少数のエンティティのみが必要な場合はどうすればよいでしょうか。すべてのエンティティ/オブジェクトを送信してから、消費者側で「クエリ」を処理するのはちょっとばかげているように感じます。これは帯域幅の無駄であり、時間の無駄でもあります。これは、すべてのオブジェクト/エンティティについてデータベースにクエリを実行するクエリにかなりの時間がかかるためです。

何らかの方法でラムダ式または何かを引数として送信し、サービスがその式に基づいてデータベースにクエリを実行し、すべてのオブジェクトのリストを消費者に返すことは可能でしょうか?

4

4 に答える 4

1

プロジェクトの設定方法によっては解決策にならない場合がありますが、OData Web サービスを調べることをお勧めします。

http://www.dotnetexpertguide.com/2012/03/odata-service-with-asp-net-web-api.html

データを次のように返す場合、IQueryable<T>基本的にフィルターを URL に渡して、必要なデータを返すことができます。

于 2012-06-27T14:28:41.893 に答える
0

これを行うのは得策ではないかもしれません。クライアントが必要とするメソッドを提供することをお勧めします。必要に応じて、クライアントはさらにフィルタリングできます。しかし、私はあなたの質問を判断する人ではないので、この投稿から引用します。

せいぜい、式のシリアル化されたバージョンを受け入れることができるかもしれませんが、ラムダは受け入れられません。ラムダはメソッドポインターであり、式はコンパイル、分析などできるものの表現です.

于 2012-06-27T14:25:58.040 に答える
0

AFAIK - ラムダはシリアル化できないため、ネットワーク経由で送信できません。

あなたの質問は、いくつかの非常に悪い設計上の決定を示唆しています。たとえば、無制限の結果セットは非常に悪いです。クエリに述語を追加するには、フィルター オブジェクトまたはその他のものを使用することを検討する必要があります。少なくとも、次のようなことを考える必要があります。

GetAll(int 開始、int スキップ)

于 2012-06-27T14:27:38.427 に答える
0

いいえ、WCF メソッドでラムダまたはデリゲートを渡すことはできません。詳細については、このトピックを参照してください

あなたの仕事に出くわしたとき、私はこのアプローチの1つを使用しました

  1. フィルター パラメーター用に別のクラスを作成し、インスタンスをサーバーに渡します。サーバー側では、渡されたオブジェクトに基づいてクエリを作成する必要があります。
  2. Dictionary<string,string>フィルタ パラメータのコンテナとしての の使用。この場合、列挙型、GUID などがある場合は、サーバー側で値を解析する必要があります。また、フィルター パラメーターに複数の値がある場合にも制限があります。ただし、別のクラスを作成する必要はありません。
于 2012-06-27T14:59:47.417 に答える