尝试在小数字段上过滤 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.Decimal
与 Edm.Double
进行比较。
要解决这个问题,请使用 Edm.Decimal
文字:
"foo eq 100.5M"
我有这段代码
$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.Decimal
与 Edm.Double
进行比较。
要解决这个问题,请使用 Edm.Decimal
文字:
"foo eq 100.5M"