是否有一种快速的方式可以说如果在查询的Linq中,注意事项是否为x或者其他x =默认值

时间:2009-07-18 17:25:17

标签: c# linq .net-3.5

有快速说法吗

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`查询中。

抱歉这个问题写的很糟糕。

......根据更新的评论......

3 个答案:

答案 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>())

其中DefaultValueT的通用函数,返回所谓的“默认”值。