簡體   English   中英

在Azure表存儲中的DateTime字段上進行篩選時出現異常

[英]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庫似乎存在一致性問題,導致它不能始終將模型中的字段映射到表中的字段。 可能是RequestTimeResponseTime都是受保護的單詞,因此我使用它們的名稱會破壞實現而不會正確警告我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM