2012-01-03 86 views
3

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

这里有趣的是$滤波器参数。它具有格式 “的indexOf(ItemType的, 'Attri')GE 0”

源是一个网格(iggrid从Infragistics的),其上有文字 'Attri'

我的问题是所述的ItemType柱过滤:映射顶部参数和跳过参数并不重要,但如何执行过滤器。我是否需要解析它并构建自己的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

是否使用WCF数据服务?这应该为你处理所有这些。如果没有,请尝试一下。 – 2012-01-03 12:45:42

+0

不,我刚刚使用来自WebMatrix的数据库迷你ORM。我希望避免WCF数据服务。但谢谢你的建议。这可能是最好的选择。 – Larsi 2012-01-04 13:43:39

+0

事情就是当你想要支持$ expand和$ select时,它会变得非常复杂。我也怀疑Json.Write会生成符合OData的有效载荷。也许这不是你的目标,但如果是这样,它很快就会成为问题。 – 2012-01-04 17:30:33

回答

0

如果您使用的igGrid MVC的包装则映射为您完成。以下是从Infragistics jQuery help报价:

“当ASP.NET MVC包装被用于通过LINQ(IQueryable的),这是在 编码的所有过滤信息绑定到服务器端数据 的URL自动地转换为LINQ表达式子句(其中 子句),因此您无需执行其他任何操作即可为 过滤数据。“

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