如何在odata过滤中使用eq进行投射?

时间:2013-10-08 15:06:10

标签: odata

我想通过用户交互在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

请你检查一下是什么错误

3 个答案:

答案 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

欢迎提供反馈!