在c#中将Date转换为刻度(用于表存储查询)
本文关键字:用于 存储 查询 中将 Date 转换 | 更新日期: 2023-09-27 17:51:09
我有一个表存储,其中分区键是每秒生成的DateTime刻度。
我想通过查询某个日期生成的分区键来检索该日期的记录。
我想我需要一种方式,我提供一个日期,并将其转换为刻度。或者是否有更好的查询方法?
听起来您需要在日期时间上设置.Ticks
属性:
如果没有真正的数据结构,您可能需要某种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);
}