我在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的地方,但仍然想知道是否有解决此问题的方法。
答案 0 :(得分:1)
我看得越多,在运行更多测试之后,我认为该错误可能出现在Visual Studio的Sql Server Query Visualizer插件中,而不是实际上在Linq to SQL本身。因此,它的情况并不像我想象的那么糟糕 - 查询将返回正确的结果,但您不能相信Visualizer显示的内容。不是很好,但比我想象的要好。
答案 1 :(得分:0)
在判断之前,尝试实际查看datacontext的输出。
DataContext.Log()将为您提供生成的SQL。