尝试基于类型为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,
);
在代码中,两个变量(dateFrom,&dateTo)都是DateTime类型,Timestamp是DateTime类型。根据Odata类型link查询比较运算符,比较运算符两边的数据类型必须兼容。这是我的情况都是一样的,然后我得到一个错误。
2条答案
按热度按时间bpsygsoo1#
在发送给query之前打印dateTo和dateFrom。
我在输出中得到了这个:-x1c 0d1x经过多次调试,我知道我发送dateFrom和dateTo的方式不正确。
正确的方法是dateFrom.和dateTo.。但这应该在Azure表或OData查询中提到,但它不在那里。
这是造成混乱,因为得到错误,即使两者的类型是相同的。正确的代码如下:
现在我可以根据Timestamp属性从Azure表中查询实体了。
zy1mlcev2#
按日期字段筛选时,不要将日期值放在引号中。
这是错误的:
这是正确的: