Vb.net 在LINQ语句中使用OrElse
我有以下疑问:Vb.net 在LINQ语句中使用OrElse,vb.net,linq,Vb.net,Linq,我有以下疑问: Dim query=来自Me.DataWorkspace.Products\u dbData.MaterialList中的m_ 其中m.ProductModel=Me.lblMyModel_ 和((m.MaterialID=MyParam)或(m.MaterialID.Contains(MyParam)))_ 选择m_ 索特先生订购 我的数据摘录如下: ProductModel MaterialID SortNumber ------------ --------
Dim query=来自Me.DataWorkspace.Products\u dbData.MaterialList中的m_
其中m.ProductModel=Me.lblMyModel_
和((m.MaterialID=MyParam)或(m.MaterialID.Contains(MyParam)))_
选择m_
索特先生订购
我的数据摘录如下:
ProductModel MaterialID SortNumber
------------ ------------- ----------
111 ABC_材料1空
111材料1 0
111 XYZ_材料1 0
111材料2_J 0
111材料2_K 1
111材料2_L 2
我有两个场景要使用相同的查询
场景1:
MyParam=“Material1”
预期结果:
query=“Material1”
这意味着m.MaterialID=MyParam
匹配且OrElse
短路,因此m.MaterialID.Contains(MyParam)
不执行
实际结果:
query=“ABC\U Material1”、“Material1”、“XYZ\U Material1”
因此,出于某种原因,我不明白,包含的
正在执行
场景2:
MyParam=“Material2”
预期结果:
query=“Material2\u J”、“Material2\u K”、“Material2\u L”
这意味着m.MaterialID=MyParam
不匹配,因此执行m.MaterialID.Contains(MyParam)
实际结果:
query=“Material2\u J”、“Material2\u K”、“Material2\u L”
所以这似乎和我预期的一样有效
问题:
为什么这不是我期望的那样?我做错了什么?我很确定我误解了OrElse
操作符的功能,但我似乎找不到对我有意义的解释
如有其他选择和解决办法,将不胜感激
这意味着m.MaterialID=MyParam匹配且OrElse短路,因此m.MaterialID.Contains(MyParam)不执行
它不会对单个值执行,但会对其他条目执行
你要记住的是,你的谓词应用于每个结果。是否已经存在精确匹配是完全不可见的,与谓词的后续应用程序无关
另一方面,假设字符串“包含自身”,则谓词等价于:
Where m.ProductModel = Me.lblMyModel And m.MaterialID.Contains(MyParam)
听起来你真的想做两个查询:一个精确匹配查询,然后(如果没有找到任何结果)一个部分匹配查询。你正确理解了
OrElse
,但不是LINQ查询的工作方式。对每一行执行该条件,与前一行的结果无关。请参考:在SQL中,
或作为或被转换为相同的内容:或
。但这并不是答案中提到的问题所在。