有没有办法在 linq 语句中执行类似于 IIF(condition, trueValue, falseValue) 的操作?
Is there a way to do something similar to IIF(condition, trueValue, falseValue) within a linq statement?
如果从数据库中拉取时 属性 在我的 linq entity framework 查询中为空,我正在尝试 return 一个字符串。
select new with { .StringOnlyProp = IIF(x.PossiblyNull Is Nothing, "", x.PossiblyNull)
这将抛出一个错误,指出 linq 无法解释 IIF。
我认为 c# 语法类似于 x.PossiblyNull ?? ""
我希望 VB.NET 有类似的东西。
我相信 VB 相当于 C# 的 ??
运算符是 If
。例如,您只需要从示例中删除一个字母:
If(x.PossiblyNull Is Nothing, "", x.PossiblyNull)
或者正如@Glorin 在评论中指出的那样,使用 If
函数的 two argument 版本进行空合并:
If(x.PossiblyNull Is Nothing, "")
对于一般情况,您可以:
value = If(<test>, <true result>, <false result>);
这与您已有的类似,只是 IIF 评估两个 return 值(这是错误的简单来源)。它是 vb.net 等价于以下内容:
value = <test> ? <true result> : <false result>;
对于 null 测试的快捷版本,您可以使用 null 合并运算符:
value = If(PossiblyNull,<result if null>)
这是vb.net版本:
value = <test> ?? <result if null>;
不过请注意 - 根据您对 linq 的处理方式,如果 linq 无法转换为数据库查询,您可能仍然会遇到问题。
如果从数据库中拉取时 属性 在我的 linq entity framework 查询中为空,我正在尝试 return 一个字符串。
select new with { .StringOnlyProp = IIF(x.PossiblyNull Is Nothing, "", x.PossiblyNull)
这将抛出一个错误,指出 linq 无法解释 IIF。
我认为 c# 语法类似于 x.PossiblyNull ?? ""
我希望 VB.NET 有类似的东西。
我相信 VB 相当于 C# 的 ??
运算符是 If
。例如,您只需要从示例中删除一个字母:
If(x.PossiblyNull Is Nothing, "", x.PossiblyNull)
或者正如@Glorin 在评论中指出的那样,使用 If
函数的 two argument 版本进行空合并:
If(x.PossiblyNull Is Nothing, "")
对于一般情况,您可以:
value = If(<test>, <true result>, <false result>);
这与您已有的类似,只是 IIF 评估两个 return 值(这是错误的简单来源)。它是 vb.net 等价于以下内容:
value = <test> ? <true result> : <false result>;
对于 null 测试的快捷版本,您可以使用 null 合并运算符:
value = If(PossiblyNull,<result if null>)
这是vb.net版本:
value = <test> ?? <result if null>;
不过请注意 - 根据您对 linq 的处理方式,如果 linq 无法转换为数据库查询,您可能仍然会遇到问题。