基本上,我想将odata查询表达式"$filter", "itemID eq 1"转换为where(w=>w.itemID==1)。
是否有现成的库可以执行此操作?否则,我需要使用DynamicLinq类和linqKit编写代码。
是否有现成的库可以执行此操作?否则,我需要使用DynamicLinq类和linqKit编写代码。
我正在使用Microsoft WebAPI,并安装了以下NuGet程序包:
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,在该API中检索具有ID为1的项的URL将如下所示:
/api/items/1
如果我基于集合中的其他属性进行查询,或者像以下示例中检索前10条记录时,请仅在项目集合上使用oData查询。
$.ajax({ url: '/api/items', data: $.param({ '$top': 10 }) });
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格式中的过滤器和排序
你可以使用 Microsoft.Rest.Azure.OData
字符串过滤器 = new ODataQuery(x => x.itemID == 1).Filter;