linq包含声明中的错误 - 是否有修复或解决方法?

时间:2008-09-12 20:07:19

标签: .net linq

我在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的地方,但仍然想知道是否有解决此问题的方法。

2 个答案:

答案 0 :(得分:1)

我看得越多,在运行更多测试之后,我认为该错误可能出现在Visual Studio的Sql Server Query Visualizer插件中,而不是实际上在Linq to SQL本身。因此,它的情况并不像我想象的那么糟糕 - 查询将返回正确的结果,但您不能相信Visualizer显示的内容。不是很好,但比我想象的要好。

答案 1 :(得分:0)

在判断之前,尝试实际查看datacontext的输出。

DataContext.Log()将为您提供生成的SQL。