gpt4 book ai didi

c# - 在 Azure 表存储中筛选日期时间字段时出现异常

转载 作者:行者123 更新时间:2023-11-30 14:10:49 26 4
gpt4 key购买 nike

我在尝试按日期时间字段筛选 Azure 表存储的结果时遇到了一种奇怪的问题。我对具有两种不同模型的两个不同表有两个不同的查询。两者都需要过滤 DateTime 字段,但只有一个有效,另一个返回异常:

Microsoft.WindowsAzure.Storage.StorageException was unhandled by user code
HResult=-2146233088
Message=The remote server returned an error: (400) Bad Request.
Source=Microsoft.WindowsAzure.Storage
StackTrace:
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)

查询:

 var fromDate = DateTime.UtcNow.AddDays(-14);

工作一:

 from entity in AnalyticsStorage.ConversionTable.CreateQuery<ConversionAnalyticsModel>()
where entity.Date > fromDate
select entity

不工作:

 from entity in AnalyticsStorage.Table.CreateQuery<AnalyticsTableModel>()
where entity.ResponseTime > fromDate
select entity

我已确保日期时间字段实际上已填充在表中。注释掉 where 会使查询运行,但显然这不是很有用。

有人遇到过这种情况吗? Azure 表存储中是否存在我可能遇到但看不到的问题?

这是针对当前版本的 Azure 存储 DLL (3.0.3) 构建的,两个查询并排在同一个类中,只是方法不同。

最佳答案

我不能说我知道为什么会发生这种情况,但在使用 Fiddler 一段时间后,我发现它使用了匿名类型作为字段名称:

() gt datetime'2014-02-27T21:55:16.9605195Z' 

应该是:

RequestTime gt datetime'2014-02-27T21:55:16.9605195Z'

一旦我注意到这一点,我就使用 pre-LINQ 语法编写了一个查询:

var query = new TableQuery<AnalyticsTableModel>().Where(
TableQuery.GenerateFilterConditionForDate(
"ResponseTime",
QueryComparisons.GreaterThan,
fromDate));

这非常有效。因此,当前 LINQ 库似乎存在一致性问题,导致它并不总是将模型中的字段映射到表中的字段。可能是 RequestTimeResponseTime 都是 protected 字,因此我使用它们的名称会破坏实现,而不会正确警告我。

关于c# - 在 Azure 表存储中筛选日期时间字段时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22360353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com