尝试在十进制字段上过滤OData时出错

时间:2015-02-20 16:56:34

标签: odata decimal filtering

我有这段代码

$http({
    method: 'GET',
    url: url,
    params: params,
    timeout: timeout || deferred.promise
})

params我有一个$filter属性。在我过滤的数据集中,我有一个名为foo的小数属性。如果我将$filter设置为

"foo eq 100"

我得到了正确的结果:foo等于100的所有结果。

如果我将$filter设置为

"foo eq 100.5"

我收到错误。消息是

"The query specified in the URI is not valid. A binary operator with incompatible types was detected. Found operand types 'Edm.Decimal' and 'Edm.Double' for operator kind 'Equal'"

如何进行十进制过滤?

2 个答案:

答案 0 :(得分:2)

此问题与JavaScript或AngularJS无关。

您正在查询OData服务,其中foo似乎是Edm.Decimal值,但您尝试将其与100.5进行比较,Edm.Double字面值。 eq运算符不支持将Edm.DecimalEdm.Double进行比较。

要解决此问题,请使用Edm.Decimal字面值:

 "foo eq 100.5M"

答案 1 :(得分:1)

我从来没有见过$filter来自$http电话的参与,所以我不太关注你正在做的事情。但是,如果您只想过滤结果,可以通过内置filter $filter ng-repeatAngular Docs)进行严格比较

请查看此Plunker,了解如何在模板中过滤<h2>Filter</h2> Value: <input type="number" ng-model="value"> <hr/> <h2>Items</h2> <div ng-repeat="item in items | filter:value:true"> {{item.value}} </div> 表达式的示例:Plunker Example

代码:

{{1}}