0

这里获取的这个查询非常简单:

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 方法。但是,这感觉不对,因为相同的信息已经作为字符串存储在行键中。我希望这是有道理的。

4

1 回答 1

1

如果您存储了最终返回实体的分区键和行键,您可以在以后执行 TableQuery 来检查这一点。过滤器应该是该实体的分区键的分区键=(就像您已经拥有的那样)和行键>该实体的行键。然后你可以使用你已经拥有的完全相同的代码。

于 2016-02-25T21:43:28.593 回答