在c#中将Date转换为刻度(用于表存储查询)

本文关键字:用于 存储 查询 中将 Date 转换 | 更新日期: 2023-09-27 17:51:09

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

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

我想我需要一种方式,我提供一个日期,并将其转换为刻度。或者是否有更好的查询方法?

在c#中将Date转换为刻度(用于表存储查询)

听起来您需要在日期时间上设置.Ticks属性:

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

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

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

实际上有更多的比简单地使用。ticks。不久前我写了一篇关于这个的博文:用于按(倒叙)时间顺序创建和查询表存储实体的NuGet包。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);
}