从here获取的查询非常简单:
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之后输入了更多Footwear。要创建“订单”,我使用this approach。
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表存储中。要创建这样的rowkey,我可以按如下方式对实体进行排序:
var query =
(from s in _table.CreateQuery<SomeClass>()
where
s.PartitionKey == _partitionKey &&
string.Compare(s.RowKey, rowKeyToUse, StringComparison.Ordinal) > 0
select s).AsTableQuery();
我不时想检查是否有新的实体。我不认为我可以使用rowkey(参见here)。因此,目前我将最后一个实体的最新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方法。但是,这感觉错误,因为相同的信息已经作为字符串存储在rowkey中。我希望这是有道理的。
答案 0 :(得分:1)
如果存储了返回的最终实体的分区键和行键,则可以在将来执行TableQuery来检查它。过滤器应该是分区键=到该实体的分区键(就像您已经拥有的那样)和行键&gt;该实体的行键。然后你可以使用你已经拥有的完全相同的代码。