2

ASP.NET Web APIプロジェクトがあり、プロジェクトでASP.NEToDataプレビューパッケージを使用してoDataフィルターを使用したいと考えています。これはIQueryable、応答タイプとして使用する必要があることを意味します。

残念ながら、消費者は次のようにラップされた応答を必要とします。

{
   "total": 2,
   "success": true,
   "data": [ 
           { object1 },
           { object2 } ]
}

IQueryable元のバージョンからの応答を「data」プロパティに割り当て、「total」プロパティと「success」プロパティの値も設定するラッパーオブジェクトを作成しました。これにより、コンシューマーが探しているJSON応答が作成されます。しかし、それはもはやIQuery可能ではありません。つまり、oDataフィルターを実装することはできません。

ラッパーオブジェクトを取得し、列挙子などを設定してIQueryableを実装することを望んでいました。ただし、インターフェイスを実装するためにProviderプロパティとExpressionプロパティを割り当てる必要があるため、これは機能しないと思います。私がそこに何を置くべきかを知っています。IoCでリポジトリパターンを使用しています。EntityFrameworkコードの最初のデータアクセスは別のプロジェクトで行われ、Ninjectを使用して具体的なオブジェクトがインターフェイスプレースホルダーに割り当てられています。おそらく、リポジトリオブジェクトがIQueryProviderへの参照を保持するように、データアクセス層からインターフェイスを抽象化することができます。これでうまくいき、自動化されたoData統合をサポートできると思いますか?

4

1 に答える 1

3

方法は次のとおりです。舞台裏では、[Queryable] は ODataQueryOptions のインスタンスを作成し、それを返すクエリ可能オブジェクトに適用します。幸いなことに、ODataQueryOptions をパラメーター バインドして、次のようなコードを作成できます。

public Wrapper<MyObject> Get(ODataQueryOptions<MyObject> queryOptions)
{
    IQueryable<MyObject> queryResults = queryOptions.ApplyTo(dbSet);
    return Wrap(queryResults);
}

[Queryable] はもう必要ありません。それがあなたのためにしてくれることをしているからです。それが役立つことを願っています。

于 2013-02-06T03:16:56.903 に答える