将$ filter从oData参数映射到linq其中

问题描述 投票:3回答:2

我有(我认为是odata格式)这样的网址:

http://localhost:2282/SSE.Web/History.cshtml?GetData=true&itemId=AKE-00129&pid=1&%24filter=indexof(ItemType%2C%27Attri%27)+ge+0&%24skip=0&%24top=50&%24inlinecount=allpages&_=1325589443808

这里有趣的是$ filter参数。它的格式为“indexof(ItemType,'Attri')ge 0”

源是一个网格(来自infragistics的iggrid),它在ItemType列上过滤文本'Attri'

我的问题是:映射top和skip参数很简单,但是如何进行过滤。我是否需要解析它并构建自己的linq,还是有其他方法?

这是我到目前为止的代码:

        var skip = int.Parse(Request["$Skip"]);
    var top = int.Parse(Request["$top"]);
    var filter = Request(["$filter"]);

    var db = Database.Open("SSEConnectionString");

    var entries = db.Query("select * from eHistory order by timestamp desc")
    Json.Write(new { results = entries.Where(????).Skip(skip).Take(top), totalRecCount = entries.Count() }, Response.Output);

谢谢你的帮助!

Larsi

c# linq odata infragistics ignite-ui
2个回答
0
投票

如果您为igGrid使用MVC包装器,则会为您完成映射。以下是Infragistics jQuery help的引用:

“当ASP.NET MVC包装器用于通过LINQ(IQueryable)绑定到服务器端数据时,URL中编码的所有过滤信息都会自动转换为LINQ表达式子句(Where子句),因此您不需要这样做任何额外的东西,以过滤数据。“


0
投票

您可以使用以下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();
© www.soinside.com 2019 - 2024. All rights reserved.