我正在尝试从 AzureTable 中提取一组实体,并使用以下代码对其进行查询。
string partitionKey = string.Format(CultureInfo.InvariantCulture, "{0:d20}", accountId);
string rowKeyStart = string.Format(CultureInfo.InvariantCulture, "{0}:g", work.lead.id);
string rowKeyEnd = string.Format(CultureInfo.InvariantCulture, "{0}:h", work.lead.id);
var context = table.ServiceClient.GetTableServiceContext();
var query = context.CreateQuery<LinkedInPostEntity>(table.Name)
.Where(w => w.PartitionKey == partitionKey && w.RowKey.CompareTo(rowKeyStart) > 0 && w.RowKey.CompareTo(rowKeyEnd) <= 0)
.AsTableServiceQuery(context);
List<PostEntity> postsForLead = new List<PostEntity>();
TableContinuationToken continuation = null;
do
{
TableQuerySegment<PostEntity> segment = await AzureHelper.QuerySegmented(query, continuation);
postsForLead.AddRange(segment.Results);
continuation = segment.ContinuationToken;
} while (continuation != null);
table
是 CloudTable 的一个实例,accountId
是一个 int,并且work.lead.id
是一个字符串。我想提取所有以 RowKey 为前缀work.lead.id:g
并后跟字符串 id 的实体。我觉得这段代码应该可以工作,但它挂在QuerySegmented 给出的await
永远不会完成的情况下。Task
我的想法可能是查询格式不正确,但我不确定如何或为什么。
顺便说一句,我是新手,所以如果我忘记了任何重要信息或无论如何都可以帮助澄清,请告诉我。
编辑:这里是非常相似的代码,它在一个类似(虽然不同)的表上被调用,该表具有不同的 id 方案。我需要使用我正在使用的 api 给我的 id 方案,所以我不认为在进入之前重新格式化它是一种选择。两者之间的唯一区别是查询,所以我觉得我的查询是罪魁祸首。有任何想法吗?
string partitionKey = string.Format(CultureInfo.InvariantCulture, "{0:d20}", accountId);
string rowKeyStart = string.Format(CultureInfo.InvariantCulture, "{0}:{1:d20}", work.ScreenName, (long)0);
string rowKeyEnd = string.Format(CultureInfo.InvariantCulture, "{0}:{1:d20}", work.ScreenName, long.MaxValue);
var context = table.ServiceClient.GetTableServiceContext();
var query = context.CreateQuery<TweetEntity>(table.Name)
.Where(w => w.PartitionKey == partitionKey && w.RowKey.CompareTo(rowKeyStart) >= 0 && w.RowKey.CompareTo(rowKeyEnd) <= 0)
.AsTableServiceQuery(context);
List<TweetEntity> tweetsForLead = new List<TweetEntity>();
TableContinuationToken continuation = null;
do
{
TableQuerySegment<TweetEntity> segment = await AzureHelper.QuerySegmented(query, continuation);
tweetsForLead.AddRange(segment.Results);
continuation = segment.ContinuationToken;
} while (continuation != null);