我有以下查询:
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
我有两种情况我想使用相同的查询。
场景一:
MyParam = "Material1"
期望的结果:
query = "Material1"
意思是m.MaterialID = MyParam
匹配和OrElse
短路所以m.MaterialID.Contains(MyParam)
不执行。
实际结果:
query = "ABC_Material1", "Material1", "XYZ_Material1"
所以出于某种我不明白的原因,Contains
正在执行。
场景二:
MyParam = "Material2"
期望的结果:
query = "Material2_J", "Material2_K", "Material2_L"
意思是m.MaterialID = MyParam
不匹配,所以m.MaterialID.Contains(MyParam)
改为执行。
实际结果:
query = "Material2_J", "Material2_K", "Material2_L"
所以这似乎像我预期的那样工作。
问题:
为什么这不像我期望的那样工作?我究竟做错了什么?我很确定我误解了OrElse
操作员的功能,但我似乎找不到对我有意义的解释。
替代方案和解决方法将不胜感激。