次のクエリがあります。
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
同じクエリを使用したいシナリオが 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
オペレーターの機能を誤解していると確信していますが、私にとって意味のある説明を見つけることができないようです.
代替手段と回避策をいただければ幸いです。