【问题标题】:Found operand types 'Edm.DateTime' and 'Edm.String' for operator kind 'GreaterThanOrEqual'找到运算符类型“GreaterThanOrEqual”的操作数类型“Edm.DateTime”和“Edm.String”
【发布时间】:2021-08-15 17:36:35
【问题描述】:

在尝试根据 Edm.DateTime 类型的 Timestamp 从 Azure Table 获取实体时出错:

StorageError: A binary operator with incompatible types was detected. Found operand types 'Edm.DateTime' and 'Edm.String' for operator kind 'GreaterThanOrEqual'

代码:

let res: IQueryPrePostAuthResponse[] = [];
let query = new TableQuery();
query = query.where('PartitionKey eq ?', searchQuery.user_id);

const entGen = TableUtilities.entityGenerator;
const dateFrom = entGen.DateTime(new Date(searchQuery.date_from));
const dateTo = entGen.DateTime(new Date(searchQuery.date_to));
query = query.and(
 'Timestamp >= ? and Timestamp <= ?',
  dateFrom,
  dateTo,
);

在代码中,两个变量(dateFrom, & dateTo)都是 DateTime 类型,Timestamp 是日期时间类型。 根据Odata Docslink查询比较运算符,比较运算符两边的数据类型必须兼容。这是我的情况,两者都是一样的,然后我得到一个错误。

【问题讨论】:

    标签: azure datetime odata azure-table-storage azure-tablequery


    【解决方案1】:

    当我在发送查询之前打印 dateTodateFrom

    const entGen = TableUtilities.entityGenerator;
    const dateFrom = entGen.DateTime(new Date(searchQuery.date_from));
    const dateTo = entGen.DateTime(new Date(searchQuery.date_to));
    console.log(dateFrom);
    console.log(dateTo);
    

    我在输出中得到了这个:- 经过大量调试,我知道我发送 dateFromdateTo 的方式不正确。
    正确的方法是 dateFrom._dateTo._。但这应该在 Azure Table 或 OData Query 中提及,但那里没有。

    根据 Odata Docs link 查询比较运算符,比较运算符两侧的数据类型必须兼容

    这会造成混淆,因为即使两者的类型相同也会出错。正确的代码如下:-

    let res: IQueryPrePostAuthResponse[] = [];
    let query = new TableQuery();
    query = query.where('PartitionKey eq ?', searchQuery.user_id);
    
    const entGen = TableUtilities.entityGenerator;
    const dateFrom = entGen.DateTime(new Date(searchQuery.date_from));
    const dateTo = entGen.DateTime(new Date(searchQuery.date_to));
    query = query.and(
     'Timestamp >= ? and Timestamp <= ?',
      dateFrom._,
      dateTo._,
    );
    

    现在我可以根据 Timestamp 属性从 Azure 表中查询实体。

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 2016-08-24
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2016-12-14
      • 2018-10-12
      • 2021-09-25
      相关资源
      最近更新 更多