基本上,
我想将odata查询表达式“$ filter”,“itemID eq 1”转换为其中(w =&gt; w.itemID == 1) < / p>
此操作是否有现成的库?否则我需要使用DynamicLinq类和linqKit来编写它。
答案 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格式过滤和订购