c# – 在Azure表存储中的DateTime字段上进行过滤时出现异常
发布时间:2020-12-16 02:00:38 所属栏目:百科 来源:网络整理
导读:尝试通过DateTime字段过滤Azure表存储的结果时,我遇到了一种奇怪的问题.对于具有两个不同模型的两个不同表,我有两个不同的查询.两者都需要在DateTime字段上进行过滤,但只有一个工作,另一个返回异常: Microsoft.WindowsAzure.Storage.StorageException was u
尝试通过DateTime字段过滤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 我确保在表格中实际填充了DateTime字段.注释掉运行查询的位置,但显然不是很有用. 有没有人碰到这个? Azure Table Storage中是否存在可能遇到但无法看到的问题? 这是针对当前版本的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库似乎存在一致性问题,导致它不能始终将模型中的字段映射到表中的字段.可能是RequestTime和ResponseTime都是受保护的单词,因此我使用它们的名称会破坏实现而不会正确警告我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |