有没有对linq的ODATA查询表达式(ODATA到Linq)

时间:2013-03-01 09:30:44

标签: linq odata

基本上,

我想将odata查询表达式“$ filter”,“itemID eq 1”转换为其中(w =&gt; w.itemID == 1) < / p>

此操作是否有现成的库?否则我需要使用DynamicLinq类和linqKit来编写它。

2 个答案:

答案 0 :(得分:10)

我正在使用安装了以下NuGet软件包的Microsoft 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是您要检索的对象的主ID,我可能会遵循REST原则并创建和API,其中用于检索ID为1的项目的URL将是:

/api/items/1

如果我根据集合中项目的其他属性进行查询,则只对项目集合使用oData查询,或者在检索前10条记录时执行类似下面的操作。

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

答案 1 :(得分: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格式过滤和订购