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
Vb.net 列中的Linq 3值选择_Vb.net_Linq_Filter - Fatal编程技术网

Vb.net 列中的Linq 3值选择

Vb.net 列中的Linq 3值选择,vb.net,linq,filter,Vb.net,Linq,Filter,我在理解Linq方面有点困难。 在vb.net中使用以下linq: Dim qeurySearch = (From P In DB.table1 Where P.number = searchInput And P.valueCol = 2 OrElse P.valueCol= 3 OrElse P.valueCol = 4 Select P.number , P.valueCol ).ToList 我从这得到的是4张唱片。。。所有这些

我在理解Linq方面有点困难。 在vb.net中使用以下linq:

    Dim qeurySearch = (From P In DB.table1
      Where P.number = searchInput And P.valueCol = 2 OrElse 
      P.valueCol= 3 OrElse P.valueCol = 4
      Select P.number , P.valueCol
      ).ToList
我从这得到的是4张唱片。。。所有这些都不是searchInput。 假设searchinput为“102”,同一表格中的valueCol的值为“1”。那么我所期望的是它不会工作,它不会给我任何记录。但这是错误的

发生的情况是,它完全忽略WHERE子句中的searchInput,并给出p.valueCol=4条记录。好像那是唯一的WHERE子句


有人知道如何以正确的方式过滤查询吗?通过给出P.编号,并且该列只能有一个P.valueCol为1、2或3。

我怀疑这是一个优先问题。我不知道VB优先级规则,但我怀疑您的查询被视为:

Where P.number = (searchInput And P.valueCol = 2) OrElse 
                 P.valueCol= 3 OrElse P.valueCol = 4
我建议您将代码更改为:

Where P.number = searchInput AndAlso (P.valueCol = 2 OrElse 
                                      P.valueCol = 3 OrElse 
                                      P.valueCol = 4)

尝试包括一些括号:

如果你用词来思考你的问题,你可能会说:

其中,number等于searchinput,valuecol为2、3或4中的一个

这就很好地说明了括号的位置:

Dim qeurySearch = (From P In DB.table1
  Where P.number = searchInput 
  And (P.valueCol = 2 OrElse P.valueCol= 3 OrElse P.valueCol = 4)
  Select P.number , P.valueCol
  ).ToList
更深入地说,这可以归结为逻辑运算符优先级。这是查询中逻辑运算符的考虑顺序。对此,一个相当正常的标准是首先考虑
而不是
,然后是
,然后是
。例如,请参见MS SQL主题中的

在您的情况下,这意味着首先检查包含
的条件:

p.number=searchInput和p.valueCol=2


在检查以下
部分之前。

谢谢,它工作得很好。我不知道括号会在linq中被接受。给我一分钟,接受你的回答,我想它有时间限制。谢谢你回答我的问题,jon skeet,很快给了我答案,我在看到你的答案之前尝试了他的答案。