有快速说法吗
Where (data.x == (If notempty x = y else x = default))
假设被比较的数据是两个字符串
Compare listitem.string with passed.string - if passed.string isnotempty, else passed.string equals default value.
在Linq'where`查询中。
抱歉这个问题写的很糟糕。
......根据更新的评论......
答案 0 :(得分:3)
这实际上取决于x和y的数据类型,但是它们是字符串:
Where (data.x == (!string.IsNullOrEmpty(y) ? y : "default"))
它被称为conditional operator。
答案 1 :(得分:3)
你的原帖可以解释为:
where (data.x ?? y) == y
编辑:我现在很确定这就是你的尝试。 :)
编辑2:这是null-coalescing operator。
编辑3:无论是谁投票我都应该发布一个理由。我将第一篇文章解释为:“如果x不为空,它应该等于y,但是可以等于默认值(类型为y)。”对于参考类型或可空类型,我的帖子是正确的。
编辑4:我仍然可能是他最新帖子的最干净的答案。我一直在读它,它的措辞仍然奇怪。 (string.IsNullOrEmpty(y))
帖子是另一种可能性。
答案 2 :(得分:3)
好的,在你对原帖的澄清之后,我想我已经看到了你现在所得到的。
尝试以下子句(其中data.x
是您当前的元素,而y
是传递的参数。)
where y == (string.IsNullOrEmpty(y) ? "default" : data.x)
我不相信在这里使用空合并运算符是可能的,因为您要比较和返回的变量是不同的。
旧帖子:
什么是空的?我猜你指的是y
。
对于泛型类型T
,您可以使用以下子句:
where data.x == (y ?? DefaultValue<T>())
其中DefaultValue
是T
的通用函数,返回所谓的“默认”值。