尝试在小数字段上过滤 OData 时出错

Error when trying to filter OData on a decimal field

我有这段代码

$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'"

如何进行小数过滤?

我从未见过 $filter 调用的 $http 参数,所以我不太理解你在做什么。但是,如果您只想过滤结果,可以通过内置的 filter $filter (Angular Docs)

进行严格比较

查看此 Plunker,了解如何过滤模板中的 ng-repeat 表达式的示例:Plunker Example

代码:

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

此问题与JavaScript或AngularJS无关。

您正在查询 OData 服务,其中 foo 是一个 Edm.Decimal 值,但您正试图将它与 100.5 进行比较,后者是一个 [=14= 】 字面意思。 eq 运算符不支持将 Edm.DecimalEdm.Double 进行比较。

要解决这个问题,请使用 Edm.Decimal 文字:

 "foo eq 100.5M"