有没有办法在 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 无法转换为数据库查询,您可能仍然会遇到问题。