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

时间:2012-01-03 11:37:42

标签: c# linq odata infragistics ignite-ui

我有(我认为是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

2 个答案:

答案 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();