0

我想通过用户交互在 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 ?$select=Freight,OrderID&$filter=OrderDate+eq+(cast(1996-07-05T00:00:00,'Edm.DateTime' ))&$top=5&$format=json

你能检查一下有什么问题吗

4

3 回答 3

2

“1996-07-05T00:00:00”不是格式良好的日期时间常数,它应该是“datetime'1996-07-05T00:00:00'”然后这个查询有效: http://services.odata。 org/V3/Northwind/Northwind.svc/Orders ?$select=Freight,OrderID&$filter=OrderDate+eq+(cast(datetime'1996-07-05T00:00:00','Edm.DateTime'))&$top =5&$格式=json

不知道为什么您的 analyticView 请求出错。如果您可以分享有关模型和错误消息的更多详细信息,那就太好了。

于 2013-10-09T15:49:21.933 回答
2

为什么需要演员表?你可以试试这个查询,

analyticView?$select=AMOUNT_SOLD,FAMILY_NAME&$filter=SALE_PRICE eq 323.7M&$format=json

您可以通过在它们后面加上 m|M 来表示小数,例如 3.27M

于 2013-10-08T17:00:22.423 回答
0

为了解决这个问题,我创建了这个处理程序

//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' 

你可以在这里找到更详细的描述

欢迎反馈!

于 2013-10-12T03:25:29.240 回答