[英]Mapping $filter from oData parameter to linq Where
我有(我认为是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
如果您为igGrid使用MVC包装器,则会为您完成映射。 以下是Infragistics jQuery帮助的引用:
“当ASP.NET MVC包装器用于通过LINQ(IQueryable)绑定到服务器端数据时,URL中编码的所有过滤信息都会自动转换为LINQ表达式子句(Where子句),因此您不需要这样做任何额外的东西,以过滤数据。“
您可以使用以下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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.