[英]Exception when filtering on DateTime field in Azure Table Storage
嘗試通過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字段。 注釋掉where
,使查詢運行,但顯然這不是非常有用的。
有沒有人碰到這個? 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
都是受保護的單詞,因此我使用它們的名稱會破壞實現而不會正確警告我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.