3

我有一个表存储,其中分区键是每秒生成的 DateTime 滴答声。

我想通过查询当时生成的分区键来检索某个日期的记录。

我想我需要一种方法来提供日期并将其转换为刻度。还是有更好的查询方法?

4

2 回答 2

3

听起来您需要在.Ticks日期时间使用该属性:

http://msdn.microsoft.com/en-gb/library/system.datetime.ticks.aspx

如果没有真正了解您的数据结构,您可能需要某种查询之间的查询来获取您需要的所有记录,可能提供两个日期。

请注意,如果刻度键不是通过 C# 生成的,那么您可能需要使用生成刻度的任何机制来获得具有相同精度级别的键,请参见下面的 t-sql 示例链接:

T-sql,滴答声,时间戳

于 2013-01-09T12:44:08.990 回答
3

实际上,它不仅仅是使用 .Ticks。前段时间我在博客上写过:NuGet package for create and querying Table Storage entity in (reverse) chronological order。NuGet 包(同时支持新旧表存储 SDK)允许您根据当前时间创建实体,还允许您查询它们(甚至支持日期范围)。

创建实体(查看RowKey.CreateChronological

foreach (var blogPost in BlogReader.Read())
{
    table.Execute(TableOperation.Insert(new Model.BlogPostEntity()
    {
        Author = blogPost.Author,
        PartitionKey = "WindowsAzure",
        PublishedOn = blogPost.PublishedOn,
        Title = blogPost.Title,
        RowKey = RowKey.CreateChronological(blogPost.PublishedOn)
    }));
}

查询实体(查看QueryDateReverseChronologicalComparisons.After

var ctx = new Microsoft.WindowsAzure.Storage.Table.DataServices.TableServiceContext(table.ServiceClient);
var query = ctx.CreateQuery<BlogPostTableServiceEntity>("ChronoTableStorageSample")
               .Where(QueryDateReverseChronologicalComparisons.After, 
                        DateTime.Parse("2012-12-10 00:00:00"));

foreach (var blogPost in query)
{
    Console.WriteLine("{0:yyyy-MM-dd}: {1}", blogPost.PublishedOn, blogPost.Title);
}
于 2013-01-09T13:17:22.563 回答