基于Microsoft .NET的OData:如何模拟三元布尔条件运算?
OData中实现条件计算字段的方案
你定义了如下实体类:
public class Data { public bool x; public string m; }
在LINQ里可以用这段代码,根据x的状态生成计算字段status:
list.Select(data => new { data.m, status=data.x==true? "ready" : "not ready" });
现在要在Microsoft类库的OData请求里实现同样逻辑,已知不能用case函数,之前查Stack Overflow提到可能有If函数但没找到官方文档说明,下面是具体实现方法:
具体实现
在OData v4及Microsoft官方OData类库的支持下,确实可以用小写的if函数实现三元表达式逻辑,这是OData规范里的内置函数,可能部分旧文档未明确标注,但主流的Microsoft OData实现(比如Web API OData)均已支持。
对应的OData请求URL写法如下:
$select=m,status=if(x, 'ready', 'not ready')
注意要点
- 必须使用OData v4及以上版本,v3及更早版本不支持该
if内置函数 - 函数参数顺序为
if(条件表达式, 条件为真时的返回值, 条件为假时的返回值),这里x是布尔属性,可直接作为条件表达式使用 - 字符串常量需要用单引号包裹
- 如果服务端基于Web API OData搭建,只要正确配置了OData功能,无需额外添加自定义函数,直接就能使用这个内置的
if函数
内容的提问来源于stack exchange,提问作者Julio Ollarvia
相关产品推荐
相关产品推荐

