微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

尝试根据 Timestamp(类型为 Edm.DateTime)从 Azure 表中获取实体时出错:

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

enter image description here

代码

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 是日期时间类型。 根据Odata Docs link 查询比较运算符,比较运算符两侧的数据类型必须兼容。这是我的情况,两者都相同,然后我收到错误

解决方法

当我在将 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);

我在输出中得到了这个:- enter image description here 经过大量调试后,我发现我发送 dateFromdateTo 的方式不正确。
正确的方法是dateFrom._dateTo._。但这应该在 Azure 表或 OData 查询中提到,但那里没有。

根据 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 表中查询实体。 enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。