Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq where查询中,有没有一种快速的方法来判断notempty x=y else x=default_C#_Linq_.net 3.5 - Fatal编程技术网

C# 在Linq where查询中,有没有一种快速的方法来判断notempty x=y else x=default

C# 在Linq where查询中,有没有一种快速的方法来判断notempty x=y else x=default,c#,linq,.net-3.5,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”查询中 很抱歉这个问题写得很糟糕 。。。根据更新的注释…这实际上取决于x和y

有没有一个快速的方法来表达

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”查询中

很抱歉这个问题写得很糟糕


。。。根据更新的注释…

这实际上取决于x和y的数据类型,但表示它们是字符串:

Where (data.x == (!string.IsNullOrEmpty(y) ? y : "default"))

它被称为。

您的原始帖子可以解释为:

where (data.x ?? y) == y
编辑:我现在很确定这就是你所尝试的

编辑2:这是最新版本

编辑3:投票否决我的人应该给出理由。我将第一篇文章解释为:如果x不是空的,它应该等于y,但是等于defaulttypeof y也可以。对于引用类型或可空类型,我的帖子是正确的


编辑4:我的仍然可能是他最新帖子的最清晰答案。我一直在读,它的措辞仍然很奇怪。string.IsNullOrEmptyy帖子是另一种可能性。

好的,通过您对原始帖子的澄清,我想我知道您现在得到了什么

请尝试以下子句,其中data.x是当前元素,y是传递的参数

where y == (string.IsNullOrEmpty(y) ? "default" : data.x)
我认为这里不可能使用空合并运算符,因为您比较和返回的变量是不同的

旧职位: 如果什么是空的?我猜你指的是y

对于泛型类型T,可以使用以下子句:

where data.x == (y ?? DefaultValue<T>())

其中DefaultValue是T的一个泛型函数,它返回一个所谓的默认值。

对于x和y代表什么以及它们的实际类型,你应该表达得更清楚一点。表达式中有赋值和等式?你能澄清notempty指的是什么吗?@Chris M-也许你应该用简单的命令式C,因此人们可以建议如何将其翻译成Linq。目前,你只是让人们猜测你的意思。data.x或y是当前项吗?不管怎样,我已经更新了我的帖子,让你修改一下。诚然,这个问题不是很清楚,但我高度怀疑这是OP想要的。开始时,x和y的方向不对。请检查我的编辑。这句话在最初的帖子中很有意义,下面是它的用法。如果用户输入了选项y,请执行某些操作。另外,y是默认值,所以如果他们没有输入任何内容,也可以。这只是一个例子,没有迹象表明这个默认值是y。事实上,恰恰相反——我不明白它是怎么回事。默认值将同时引用data.x和y的类型。这是一个where子句,所以我必须假设他不是指赋值。子句中的=肯定是指赋值,因为他用==表示相等,这是标准的。x似乎只是一个临时变量。我承认,语法有点含糊不清,这可能接近OP想要的。然而,请注意!在有条件的情况下!这里的string.IsNullOrEmptyy被认为是不好的做法。只需切换true/false返回值的顺序就简单多了:@诺尔多林:我知道,只是不想和问题中的片段相比交换太多东西;还有很好的观点要提,谢谢。是的,很公平。为了保持一致性,这样做可能是有道理的。它还更多地对应于空合并运算符;在执行Linq查询之前。这是参数验证的一部分。y??默认值t是y!=违约?y:defaultT,这正是好的观点。它应该只是一个任意的函数,而不是默认的关键字;以及280Z28的MSDN链接罚款,我会承认这一个给你+1;不过,我确实觉得这类问题很有趣,几乎比直接回答的问题更有趣,因为其中涉及到赌博因素@280Z28:呵呵,谢谢。是的,这个问题有点令人兴奋,至少相当非典型,因为我们实际上是在赌可能性。。。