2011-06-30 15 views
0

Azureテーブルストレージでの作業は初めてですが、以下のコードを組み合わせることで、ユーザーが指定したfilterQuery(文字列)を受け入れることができます。 Amount 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ある場合、すべてのエントリが取得/返されるまでコードが座ります。しかし、私は、一度に返されるエンティティの数(最大の結果)をユーザが指定できるようにし、継続トークンを使用して後続の呼び出しを行って一致するエンティティの次のバッチを取得できるようにしたい。

ユーザーが検索条件を単純な文字列で指定できるようにすることなく、これをどのように達成できるかについてのご意見はありますか?

私はあなただけquery.EndExecuteSegmented(query.BeginExecuteSegmented(...))を行うことができると思う

答えて

0
+0

smarx、ありがとう。あなたの提案は、私の問題の一部(ページ番号の問題)のみを処理します。しかし、ユーザーが検索条件を文字列として指定できるようにするためには、どのように拡張できるかを理解することはできません(例: "Amount le 500.00 and IsPet eq True")。彼のエンティティにユーザーがいることは彼自身の責任であり、私は実際に彼のエンティティを表すクラスを持っていないので、このフィルタの柔軟性が必要です。 – Hjalmar

+0

部分が変更される理由はありますか? – smarx

0

をあなたは(REST APIを使用して、クエリを実装することもできますhttp://msdn.microsoft.com/en-us/library/dd179421.aspx)。あなたはオブジェクトのコレクションを作成するために解析できるストレージサービスからXML応答を返します。

関連する問題