我有以下查询:在LINQ语句中使用OrElse运算
Dim query = From m In Me.DataWorkspace.Products_dbData.MaterialList _
Where m.ProductModel = Me.lblMyModel _
And ((m.MaterialID = MyParam) OrElse (m.MaterialID.Contains(MyParam))) _
Select m _
Order By m.SortNumber
我的数据的摘录如下:
ProductModel MaterialID SortNumber
------------ ------------- ----------
111 ABC_Material1 NULL
111 Material1 0
111 XYZ_Material1 0
111 Material2_J 0
111 Material2_K 1
111 Material2_L 2
我有两个场景,我想用同样的查询。
方案1:
MyParam = "Material1"
期望的结果:
query = "Material1"
含义该m.MaterialID = MyParam
匹配和OrElse
短路所以m.MaterialID.Contains(MyParam)
不会执行。
实际结果:
query = "ABC_Material1", "Material1", "XYZ_Material1"
所以,由于某种原因,我不明白,在Contains
正在执行。
方案2:
MyParam = "Material2"
期望的结果:
query = "Material2_J", "Material2_K", "Material2_L"
意思是说m.MaterialID = MyParam
不匹配等m.MaterialID.Contains(MyParam)
执行来代替。
实际结果:
query = "Material2_J", "Material2_K", "Material2_L"
因此,这似乎是我预期的那样工作。
问:
这是为什么不工作,我希望它的方式吗?我究竟做错了什么?我很确定我误解了OrElse
运营商的功能,但我似乎无法找到对我有意义的解释。
备选方案和解决方法将不胜感激。
对于您的信息:作为'OrElse'的'Or'都被翻译成SQL:'OR'中的同一个东西。但答案中提到的那里并不是什么问题。 – Mew