我在 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 语句重写为现在使用联接而不是包含的位置,但仍想知道是否有解决此问题的方法。