使用Odata v3在$ filter中输入一列

时间:2014-09-29 07:51:16

标签: odata

我正在尝试对查询进行强制转换,但它却给我一个错误500

http://source/service/odata.svc?$filter=(cast(Value,'Edm.Int32') eq 1)

列'Value'是Edm.String

请注意,我使用的是OD3的v3

1 个答案:

答案 0 :(得分:0)

我认为您可能会收到来自服务的错误消息:

No coercion operator is defined between types 'System.String' and 'System.Nullable`1[System.Int32]'.

Linq的Expression.Convert抛出了它,它试图将字符串值转换为int值。

这是因为只支持将数字类型强制转换为数字类型。 (这在v4 spec 5.1.1.4.29演员中明确提到。

另请注意,其他强类型语言也不允许将“CAST”从字符串直接转换为int。因此,以下代码将无法编译:

string a = "3";
int b = (int) a;

更好的解决方案是在这里手动转换const:

http://source/service/odata.svc?$filter=Value eq '1'
相关问题