基本上,
我想转换odata查询表达式“ $ filter”,“ itemid eq 1”到where(w => w.itemid == 1) 那里有一个准备的库来进行此操作吗?否则,我需要使用Dynamiclinq类和linqkit进行编码。
我使用Microsoft WebAPI和以下Nuget软件包安装了:
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' }) });
然后,哪个将仅返回具有等于1的ID的项目,我认为这是您所追求的?
如果ItemID是您要检索的对象的主要ID,我可能会遵循REST原则并创建API,其中URL以1的ID检索项目将是:/api/items/1
如果我根据收藏中项目的其他属性查询项目,或在检索前10个记录时进行类似的操作,则仅在项目集合上使用ODATA查询。
$.ajax({ url: '/api/items', data: $.param({ '$top': 10 }) });
您可以使用以下Nuget软件包应用过滤器:
Https://www.nuget.org/packages/community.odata.linq您可以使用odata2linq nuget:https://www.nuget.org/packages/odata2linq
它是commouncy.odata.linq的继任者,它在ihar
.