2014-11-05 90 views
0

我在我的MVC项目中使用Azure移动服务。我想获取由CreatedAt(这是一个Azure Table中的系统属性)使用Azure移动服务获取系统属性“CreatedAt”过滤的数据

以下过滤记录是我使用的代码:

IMobileServiceTable<QuestionItem> bussinessQuestionItemTable = 
    CustomDeclaration.MobileService.GetTable<QuestionItem>(); 
queryToPass = "$filter=__createdAt ge datetime'2014-10-25T04:06:27Z'"; 
var coll = await bussinessQuestionItemTable.ReadAsync(queryToPass); 

它总是会抛出异常The request could not be completed. (Bad Request)用的StatusCode:400

我尝试了与我们创建的DateTime字段相同的查询,它工作正常,但它总是失败CreatedAt

任何帮助表示赞赏。

回答

2

在.NET后端中,CreatedAt列的类型为DateTimeOffset,而不是DateTime。所以要查询基于该属性,您需要使用相应的文字在您的查询:

IMobileServiceTable<QuestionItem> bussinessQuestionItemTable = 
    CustomDeclaration.MobileService.GetTable<QuestionItem>(); 
queryToPass = "$filter=__createdAt ge datetimeoffset'2014-10-25T04:06:27Z'"; 
var coll = await bussinessQuestionItemTable.ReadAsync(queryToPass); 

请注意,如果你喜欢的类型QuestionItem有标有[CreatedAt(或属性[JsonProperty(“__ createdAt”) ]类型的DateTimeOffset的,那么你可以使用LINQ查询,以及:??

IMobileServiceTable<QuestionItem> bussinessQuestionItemTable = 
    CustomDeclaration.MobileService.GetTable<QuestionItem>(); 
var coll = await bussinessQuestionItemTable 
    .Where(q => q.CreatedAt >= new DateTimeOffset(2014, 10, 25, 4:, 6, 27, TimeSpan.Zero)) 
    .ToListAsync(); 
+0

它的工作使用的查询字符串,但无法与Lambda表达式 – 2014-11-13 05:29:57

+0

它是如何失败的客户端上是如何定义你的类型 – carlosfigueira 2014-11-13 05:31:16

+0

感谢卡洛斯,它使用查询字符串,但与Lambda Ex。失败当使用Lambda Ex时,我发现其形成的RequestUri在字符串中包含“datetime”而不是“datetimeoffset”。 这里是它 - “https://abc.azure-mobile.net/tables/QuestionItem?$filter=(__createdAt GE datetime'2014-10-24T22:36:27.000Z')&__ systemproperties = __ createdAt%2C__updatedAt” 我试着传递相同的查询字符串替换datetime与datetimeoffset,它的工作。这里是我使用的查询 - “$ filter =(__ createdAt ge datetimeoffset'2014-10-24T22:36:27.000Z')&__ systemproperties = __ createdAt%2C__updatedAt” – 2014-11-13 05:37:55