我有一个表存储,其中分区键是每秒生成的DateTime滴答。
我想通过查询当时生成的分区键来检索特定日期的记录。
我想我需要一种方式来提供日期并将其转换为刻度。或者有更好的查询方法吗?
答案 0 :(得分:3)
听起来您需要日期时间.Ticks
属性:
http://msdn.microsoft.com/en-gb/library/system.datetime.ticks.aspx
如果没有真正的数据结构,您可能需要某种查询来获取所需的所有记录,可能会提供两个日期。
请注意,如果不通过C#生成ticks键,那么您可能需要使用生成tick的任何机制来获得相同精度的密钥,请参阅下面的t-sql示例链接:
答案 1 :(得分:3)
实际上,除了简单地使用.Ticks之外,还有更多内容。我刚才在博客上写道:NuGet package for creating and querying Table Storage entities in (reverse) chronological order。 NuGet包(支持旧的和新的Table Storage 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);
}