我想通过用户交互在odata查询中设置过滤器。当用户选择数据属性时,我已经知道它的类型。例如,如果用户希望使用等于某个数字的SALE_PRICE进行过滤,则我已经知道所选属性的类型为Edm.Decimal。所以我尝试使用这个事实并使用强制转换操作构建查询。例如,要获取SALE_PRICE等于323.7的数据,我创建以下URI:
analyticView?$select=AMOUNT_SOLD,FAMILY_NAME&$filter=SALE_PRICE+eq+(cast(323.7,'Edm.Decimal'))&$format=json
但是我收到一条错误消息:
"No property 'cast' exists in type
我也在serivces.odata.org API上试过这个,但似乎无法正常工作
?http://services.odata.org/V3/Northwind/Northwind.svc/Orders $选择=货运,订单ID&安培; $滤波器=订购日期+当量+(流延(1996-07-05T00:00:00, 'Edm.DateTime'))及$顶部= 5&安培; $格式= JSON
请你检查一下是什么错误
答案 0 :(得分:2)
你为什么需要演员?您可以尝试此查询,
analyticView?$select=AMOUNT_SOLD,FAMILY_NAME&$filter=SALE_PRICE eq 323.7M&$format=json
您可以使用m | M(如3.27M
)对它们进行后缀来表示decimals答案 1 :(得分:2)
“1996-07-05T00:00:00”不是格式正确的日期时间常量,它应该是“datetime'1996-07-05T00:00:00'”然后此查询有效:http://services.odata.org/V3/Northwind/Northwind.svc/Orders ?$选择=货运,订单ID&安培; $滤波器=订购日期+当量+(流延(datetime'1996-07-05T00:00:00' , 'Edm.DateTime'))及$顶部= 5&安培; $格式= JSON
不确定为什么你的analyticView请求出错了。如果您可以分享有关模型和错误消息的更多详细信息,那将是一件好事。
答案 2 :(得分:0)
要解决此问题,我创建了此handler
//How to use
var test = odataHanlder.odataFilter();
//how to extend with new handler
test.addFilterHandler("Edm.Int16", function(_value){
return _value;
});
//how to prepare filter on the fly
console.log(test.prepareFilter("Edm.DateTime","1996-07-04T00:00:00"));
//result >> datetime'1996-07-04T00:00:00'
您可以找到更详细的说明here
欢迎提供反馈!