【问题标题】:Synchronous paging against Azure Table Storage针对 Azure 表存储的同步分页
【发布时间】:2012-06-26 07:46:36
【问题描述】:

我是使用 Azure 表存储的新手,但我能够将下面的代码组合在一起,成功地允许我的查询接受用户指定的 filterQuery(字符串)——例如:(金额 le 5000.00)——并检索符合条件的所有行(实体)。

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

我应该指出,这种允许用户指定过滤器字符串的方式对我来说是关键,因为我使用的是一个内部有字典的泛型类,以便允许我的调用者传入任意数量的元素存储到给定的实体中。因此,此解决方案允许用户驱动他希望他的查询如何搜索,而我的代码不必“知道”任何关于他的自定义字段的信息。

现在我需要添加分页。我的理解是,我使用的“执行”方法会为您处理分页,因此如果有 7,000 条符合条件的记录,我的代码将一直等待,直到所有条目都被检索/返回。但是,我希望允许我的用户指定他希望一次返回多少个实体(最大结果),然后允许他使用延续令牌进行后续调用以获取下一批匹配实体。

关于如何在不失去允许用户在简单字符串中指定其搜索条件的能力的情况下实现这一点的任何想法?

【问题讨论】:

    标签: azure pagination azure-storage azure-table-storage


    【解决方案1】:

    我认为你可以只做 query.EndExecuteSegmented(query.BeginExecuteSegmented(...))

    查看 SmarxToDo 的代码:http://blog.smarx.com/posts/todo-list-app-using-asp-net-mvc-and-windows-azure-tables

    【讨论】:

    • smarx,谢谢。您的建议仅处理我的部分问题(分页问题)。但是,我无法弄清楚如何增强它以仍然支持用户将其搜索条件指定为字符串的能力(例如:“Amount le 500.00 and IsPet eq True)。正如我所提到的,数据用户在他的实体中存储的内容取决于他,而我实际上并没有代表他的实体的类,所以我需要这种过滤器的灵活性。
    • 这部分是否有理由改变?
    【解决方案2】:

    您可能希望使用 REST API (http://msdn.microsoft.com/en-us/library/dd179421.aspx) 来实现您的查询。您将从存储服务返回 XML 响应,您可以对其进行解析以创建对象集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2023-04-03
      • 2018-10-05
      • 1970-01-01
      • 2021-03-05
      相关资源
      最近更新 更多