使用odatav3在$filter中强制转换列

使用odatav3在$filter中强制转换列,odata,Odata,我正试图对一个查询进行强制转换,但它给我带来了一个错误500 http://source/service/odata.svc?$filter=(cast(Value,'Edm.Int32') eq 1) 其中,列“Value”是一个Edm.String 请注意,我使用的是OData的v3,我想您可能会从服务中收到如下错误消息: No coercion operator is defined between types 'System.String' and 'System.Nullable`1

我正试图对一个查询进行强制转换,但它给我带来了一个错误500

http://source/service/odata.svc?$filter=(cast(Value,'Edm.Int32') eq 1)
其中,列“Value”是一个Edm.String


请注意,我使用的是OData的v3,我想您可能会从服务中收到如下错误消息:

No coercion operator is defined between types 'System.String' and 'System.Nullable`1[System.Int32]'.
它是由Linq的表达式.Convert抛出的,该表达式尝试将字符串值转换为int值

这是因为仅支持将数值类型转换为数值类型。5.1.1.4.29 cast中明确指出了这一点

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

string a = "3";
int b = (int) a;
更好的解决方案是在此处手动强制转换常量:

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