2013-03-01 6 views
6

は、基本的には式(LINQのにODATA)

は私が(ワット=>にODATAクエリ式に"$フィルタ"、 "アイテムID EQ 1"を変換したいLINQにODATAクエリがありますw.itemID == 1)

この操作の準備ができたライブラリはありますか?それ以外の場合は、DynamicLinqクラスとlinqKitを使用してコードを作成する必要があります。

答えて

9

私がインストールされ、次のNuGetパッケージにマイクロソフトWebAPIのを使用しています:

http://nuget.org/packages/Microsoft.Data.OData/

私のようなもの書くことができます

http://nuget.org/packages/microsoft.aspnet.webapi.odata

using System.Web.Http; 
using System.Web.Http.OData.Query; 

// Some stuff left out 

[Queryable] 
public IQueryable<Item> Get(ODataQueryOptions<Item> query) 
{   
    var items = query.ApplyTo(from item in context.Items select item); 
    return (IQueryable<Item>) items; 
} 

をその後、私はそれを呼び出すことができますjQuery Ajaxを使用しています(この例では、私はBackboneJSを使用することを好みます)。

$.ajax({ url: '/api/items', data: $.param({ '$filter': 'ID eq 1' }) }); 

これは、IDが1のアイテムのみを返します。これはあなたの後ろのものだと思いますか?

ITEMIDあなたは、私はおそらくRESTの原則に従い、作成してしまう取得しているオブジェクトの主なIDがある場合は、URLが1のIDとアイテムを取得するためのAPIは、次のようになります。

/api/items/1 

そして、コレクションのアイテムの他のプロパティに基づいてクエリを実行していた場合にのみ、アイテムのコレクションに対してoDataクエリを使用するか、たとえば上位10個のレコードを取得する場合など、以下のようにします。

$.ajax({ url: '/api/items', data: $.param({ '$top': 10 }) }); 
+0

query.ApplyTo私が探しているようです。モノでそれが必要です。ありがとうございました。 –

1

あなたは、フィルタを適用するには、次のNuGetパッケージを使用することができます。 https://www.nuget.org/packages/Community.OData.Linq

コードサンプルは次のようになります。

現在サポートされている
using System.Linq; 
using Community.OData.Linq; 

// dataSet in this example - any IQuerable<T> 
Sample[] filterResult = dataSet.OData().Filter("Id eq 2 or Name eq 'name3'").ToArray(); 

:V4形式のフィルタとORDERBY

関連する問題