我有(我认为是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
答案 0 :(得分:0)
如果为igGrid使用MVC包装器,则会为您完成映射。以下是Infragistics jQuery help:
的引用“使用ASP.NET MVC包装器绑定到服务器端数据时 通过LINQ(IQueryable),编码的所有过滤信息 URL自动转换为LINQ表达式子句(Where (),所以你不需要做任何额外的事情 过滤数据。“
答案 1 :(得分: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();