2011-06-30 353 views
0

我是使用Azure表存儲的新手,但我可以將下面的代碼放在一起,成功地允許我的查詢接受用戶指定的filterQuery(string) - 例如:(金額le 5000.00) - 並檢索符合條件的所有行(實體)。針對Azure表存儲的同步分頁

Dim sBuilder As New System.Text.StringBuilder 
Dim query = MyBase.CreateQuery(Of cData)("CustomerData") 
Dim userQuery = String.Format("(PartitionKey eq '{0}' and {1})", AppID, filterQuery) 
sBuilder.AppendFormat(userQuery) 
     query = query.AddQueryOption("$filter", sBuilder.ToString).AsTableServiceQuery().Take(50) 
Dim results As List(Of cData) = query.Execute.ToList 

我要指出,因爲我使用的是有字典裏面它以一個泛型類,讓我的調用者傳遞中,允許用戶指定過濾字符串的這種方式對我來說是關鍵任何數量的元素存儲到一個給定的實體。因此,這個解決方案允許用戶驅動他希望他的查詢如何進行搜索,並且我的代碼不必「知道」他的自定義字段的任何內容。

現在我需要添加分頁。我的理解是,我正在使用的'Execute'方法爲你處理分頁,所以如果有7,000條匹配條件的記錄,我的代碼將一直存在,直到檢索/返回所有條目。但是,我想允許我的用戶指定他想要一次返回多少個實體(最大結果),然後允許他使用連續令牌進行後續調用,以獲得下一批「匹配實體」。

有關如何實現這一點,而不會失去我允許用戶在簡單字符串中指定其搜索條件的能力的想法?

回答

0

我覺得你可以做query.EndExecuteSegmented(query.BeginExecuteSegmented(...))

檢查出SmarxToDo代碼:http://blog.smarx.com/posts/todo-list-app-using-asp-net-mvc-and-windows-azure-tables

+0

smarx,謝謝。你的建議只處理我的部分問題(分頁問題)。但是,我無法弄清楚如何增強它,以支持用戶將其搜索條件指定爲字符串的能力(例如:「Amount le 500.00和IsPet eq True)。正如我所提到的,數據用戶存儲在他的實體中取決於他,而我並沒有真正的類來表示他的實體,所以我需要這種過濾器的靈活性。 – Hjalmar

+0

是否有原因導致零件必須更改? – smarx