Linq の Contains ステートメントにバグが見つかりました (実際に Linq にあるのか、Linq to SQL にあるのかはわかりません)。他の誰かがこれを見たことがあるかどうか、および修正または回避策があるかどうかを知りたいです。
含むクエリソースに 10 を超えるアイテムが含まれている場合、アイテムが SQL クエリに正しく渡されません。それが何をするのかを説明するのは難しいですが、例がそれを最もよく示しています。
生のクエリを見ると、パラメーターは次のようになります。
@P0 = 'aaa'
@P1 = 'bbb'
@P2 = 'ccc'
... [@P3 through @P9]
@P10 = '111'
@P11 = '222'
... [@p12 through @P19]
@P20 = 'sss'
... [@P21 through @P99]
@P100 = 'qqq'
値が最終クエリに渡されると (すべてのパラメーターが解決されます)、渡された値であるかのようにパラメーターが解決されます。
@P0 = 'aaa'
@P1 = 'bbb'
@P2 = 'ccc'
...
@P10 = 'bbb'0
@P11 = 'bbb'1
...
@P20 = 'ccc'0
...
@P100 = 'bbb'00
そのため、パラメーターの解決では、最初の数字のみを見@P
て、それを解決し、パラメーター名の末尾に残っているものを追加するように見えます。
少なくとも、それは、Visual Studio への Sql Server Query Visualizer プラグインがクエリの実行を示していることです。
本当に奇妙です。
誰かがアドバイスを持っている場合は、共有してください。ありがとう!
更新:
元の linq ステートメントを、Contains の代わりに結合を使用するように書き直しましたが、この問題を回避する方法があるかどうかを知りたいです。