从这里获取的这个查询非常简单:
TableContinuationToken token = null;
List<Footwear> shoes = new List<Footwear>();
do
{
TableQuerySegment<Footwear> queryResult = query.ExecuteSegmented(token);
token = queryResult.ContinuationToken;
shoes.AddRange(queryResult.Results);
} while (token != null);
一旦返回 null,while 循环就会结束。是否可以存储最后一个 TableContinuationToken,然后在最后一个 TableContinuationToken 之后检查是否有更多的鞋类输入。要创建“订单”,我使用这种方法。
PS:
我希望以下内容提供更多背景信息。我目前存储此类的实例:
public class SomeClass : TableEntity
{
public long Ticks { get; set; }
public SomeClass(){}
public SomeClass(string partitionKey)
{
PartitionKey = partitionKey;
Ticks = DateTime.UtcNow.Ticks - DateTime.MinValue.Ticks;
// rowkey + partition = guid/pk
// used to order events at the other end - very important
RowKey = (DateTime.UtcNow.Ticks - DateTime.MinValue.Ticks).ToString();
}
}
在 Azure 表存储中。要创建这样的行键,我可以像这样对实体进行排序:
var query =
(from s in _table.CreateQuery<SomeClass>()
where
s.PartitionKey == _partitionKey &&
string.Compare(s.RowKey, rowKeyToUse, StringComparison.Ordinal) > 0
select s).AsTableQuery();
我不时想检查是否有新实体。我认为我不能为此使用 rowkey(另请参见此处)。所以目前我在消耗表存储的进程中存储了最后一个实体的最新 Ticks。我可以使用此查询来获取新实体:
var query =
(from s in _table.CreateQuery<SomeClass>()
where
storedEvent.PartitionKey == _partitionKey &&
storedEvent.Ticks > _ticks && // only above last threshold
string.Compare(s.RowKey, rowKeyToUse, StringComparison.Ordinal) > 0
select s).AsTableQuery();
简而言之 - 这就是我想要实现的目标:
(1) 翻阅所有实体,直到 token = null。(2) '拉'表存储。如果有新实体循环,直到 token = null。(3) 重复 (2)
我追求最简单,最强大的方法。目前我正在使用上述的 Ticks 方法。但是,这感觉不对,因为相同的信息已经作为字符串存储在行键中。我希望这是有道理的。