2

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

4

2 回答 2

1

我看的越多,在运行了更多的测试之后,我认为这个错误可能在 Visual Studio 的 Sql Server Query Visualizer 插件中,而不是在 Linq to SQL 本身中。所以情况并没有我想象的那么糟糕——查询将返回正确的结果,但你不能相信 Visualizer 显示的内容。不是很好,但比我想象的要好。

于 2008-09-12T20:17:26.463 回答
0

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

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

于 2008-09-12T21:42:47.880 回答