linq Contains语句中的错误-是否有修复程序或者解决方法?

时间:2020-03-05 18:52:30  来源:igfitidea点击:

我在Linq的Contains语句中发现了一个错误(不确定是不是真的在Linq或者SQL的Linq中),并且想知道是否有人发现了此错误以及是否有修复程序或者解决方法。

如果我们所包含的查询源中包含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的位置,但是仍然想知道是否有解决此问题的方法。

解决方案

回答

我越看越多,经过更多测试后,我认为该错误可能在Visual Studio的Sql Server Query Visualizer插件中,而不是在SQL的Linq中。因此,情况并没有我认为查询将返回正确的结果那样糟糕,但是我们不能相信Visualizer所显示的内容。不是很好,但是比我想的要好。

回答

在通过判断之前,请尝试实际查看数据上下文中的输出。

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