2012-01-03 87 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();