CloudTableQuery的Execute()函数似乎是无限的

时间:2012-09-20 16:35:34

标签: azure-storage azure-table-storage

Public ReadOnly Property logs() As CloudTableQuery(Of adlog)
Get
Return CreateQuery(Of adlog)("adlog").AsTableServiceQuery()
End Get
End Property

我有以下代码

Dim oContext = New kdlib.kdlogs.adlog_context()
Dim q = From adlogs In oContext.logs Where adlogs.PartitionKey = "xxxxxx"

只会带回1000行

如果我在某处读到.Execute()

Dim q = From adlogs In oContext.logs.Execute() Where adlogs.PartitionKey = "xxxxxx"

请求永远不会结束

我真的不明白。

基于以下成功回答的编辑

现在可以使用了

Dim azt_context As New tableContextGet
Dim azt_query As CloudTableQuery(Of adlog)
azt_query = azt_context.CreateQuery(Of adlog)("adlog").Where(Function(e) (e.PartitionKey = "xxx")).AsTableServiceQuery()
Dim azt_result = azt_query.Execute()

然后是azt_result.ToList

1 个答案:

答案 0 :(得分:0)

第一个查询会将查询参数发送到存储服务器,存储服务器会向您发送过滤结果。

您的第二个查询是尝试从表中提取所有数据,然后在内存中过滤它。这是因为oContext.logs.Execute()将立即执行查询,没有参数。顺便说一句,它可能会完成虽然可能需要很长时间。

通常,您需要先设置查询,然后调用.AsTableServiceQuery(),然后获取结果。我真的不懂VB.NET,但这应该给你一般的想法:

Public ReadOnly Property logs() As CloudTableQuery(Of adlog)
Get
Return CreateQuery(Of adlog)("adlog")
End Get
End Property

...

Dim oContext = New kdlib.kdlogs.adlog_context() 
Dim q = From adlogs In oContext.logs Where adlogs.PartitionKey = "xxxxxx"
Dim qQuery = q.AsTableServiceContext() //Do this after setting up parameters
Dim qResult = q.ToList()  //Actually executes the query.