【问题标题】:Fetching data filtered by system properties "CreatedAt" using Azure Mobile Services使用 Azure 移动服务获取按系统属性“CreatedAt”过滤的数据
【发布时间】:2014-11-06 01:23:33
【问题描述】:

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

以下是我正在使用的代码:

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 失败

感谢任何帮助。

【问题讨论】:

    标签: azure-mobile-services


    【解决方案1】:

    在.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();
    

    【讨论】:

    • 它使用查询字符串工作,但使用 Lambda 表达式失败。
    • 它是如何失败的?你的类型是如何在客户端定义的?
    • 感谢 Carlos,它使用查询字符串工作,但使用 Lambda Ex 失败。使用 Lambda Ex 时,我发现其形成的 RequestUri 在字符串中包含“datetime”而不是“datetimeoffset”。就是这样-“abc.azure-mobile.net/tables/QuestionItem?$filter=(__createdAtge datetime'2014-10-24T22:36:27.000Z')&__systemproperties=__createdAt%2C__updatedAt” 我尝试传递相同的查询字符串,用 datetimeoffset 替换 datetime 并且它起作用了。这是我使用的查询 - "$filter=(__createdAt ge datetimeoffset'2014-10-24T22:36:27.000Z')&__systemproperties=__createdAt%2C__updatedAt"
    • [CreatedAt] public DateTimeOffset CreatedAt { get;放; }
    • 您可能使用的是旧版本的客户端 SDK;在 1.2.4 版本中添加了对 DateTimeOffset 的支持 - 请参阅 changelogthe actual change
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多