找到运算符类型“GreaterThanOrEqual”的操作数类型“Edm.DateTime”和“Edm.String”

问题描述 投票:0回答:2

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

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,
);

如代码中所示,两个变量(dateFromdateTo)都是DateTime类型,而Timestamp是DateTime类型。 根据 Odata Docs link 查询比较运算符,比较运算符两侧的数据类型必须兼容。这是我的情况,两者都是相同的,然后我收到错误。

azure datetime odata azure-table-storage azure-tablequery
2个回答
1
投票

按日期字段过滤时,请勿将日期值放在引号中。

例如。这是错误的:

http://localhost:7048/XX/ODataV4/PostedSalesInvoice?Posting_Date&%24filter=Posting_Date+ge+'2023-01-01'&%24format=json 

这是正确的:

http://localhost:7048/XX/ODataV4/PostedSalesInvoice?Posting_Date&%24filter=Posting_Date+ge+2023-01-01&%24format=json 

另外,我有一个有趣的 JavaScript 库,用于构建

odata
URL,以防您感兴趣:

https://www.npmjs.com/package/navodata


0
投票

当我在发送到查询之前打印 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 表或 OData 查询中提到,但那里没有。

根据Odata文档链接查询比较运算符,比较运算符两边的数据类型必须兼容

即使两者的类型相同,也会产生错误,从而造成混乱。正确的代码如下:-

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 表中查询实体。

© www.soinside.com 2019 - 2024. All rights reserved.