Sql Net数据表选择错误?

Sql Net数据表选择错误?,sql,vb.net,Sql,Vb.net,我想我在vb.net中发现了一个bug。。我不知道它是否发生在我的主要语言C上 我发现这一点是因为我正在通过将datatable selectssql way传递给LINQ来提高旧应用程序的性能,当时我开始大喊亵渎,因为LINQ查询没有得到正确的结果 让我们解释一下 SELECT DATA_VERSION.DV_ID, FUNCTS.FUNC_ID, TEMPKEY.TEMP_KEY FROM ( SELECT 1 AS DV_ID UNION SELECT 2 AS DV_ID UNION S

我想我在vb.net中发现了一个bug。。我不知道它是否发生在我的主要语言C上

我发现这一点是因为我正在通过将datatable selectssql way传递给LINQ来提高旧应用程序的性能,当时我开始大喊亵渎,因为LINQ查询没有得到正确的结果

让我们解释一下

SELECT DATA_VERSION.DV_ID, FUNCTS.FUNC_ID, TEMPKEY.TEMP_KEY FROM
(
SELECT 1 AS DV_ID UNION
SELECT 2 AS DV_ID UNION
SELECT 3 AS DV_ID UNION
SELECT 4 AS DV_ID UNION
SELECT 5 AS DV_ID UNION
SELECT 6 AS DV_ID UNION
SELECT 7 AS DV_ID
) AS DVS,
(
SELECT 1001 AS FUNC_ID UNION
SELECT 1002 AS FUNC_ID UNION
SELECT 1003 AS FUNC_ID UNION
SELECT 1004 AS FUNC_ID UNION
SELECT 1005 AS FUNC_ID UNION
SELECT 1006 AS FUNC_ID UNION
SELECT 1007 AS FUNC_ID
) AS FUNCTS,
(
SELECT 10 AS TEMP_KEY UNION
SELECT 20 AS TEMP_KEY UNION
SELECT 30 AS TEMP_KEY UNION
SELECT 40 AS TEMP_KEY 
) AS TEMPKEY
这将输出3个具有唯一标识符的表

这个问题

WHERE DV_ID=1 AND (FUNC_ID = 1001 OR TEMP_KEY IN (10,20))
将输出

RESULT
DV_ID   FUNC_ID TEMP_KEY
1       1001    10
1       1002    10
1       1003    10
1       1004    10
1       1005    10
1       1006    10
1       1007    10
1       1001    20
1       1002    20
1       1003    20
1       1004    20
1       1005    20
1       1006    20
1       1007    20
1       1001    30
1       1001    40
RESULT
DV_ID   FUNC_ID TEMP_KEY
1       1001    10
1       1001    20
这个问题

WHERE DV_ID=1 AND (FUNC_ID = 1001 AND TEMP_KEY IN (10,20))
将输出

RESULT
DV_ID   FUNC_ID TEMP_KEY
1       1001    10
1       1002    10
1       1003    10
1       1004    10
1       1005    10
1       1006    10
1       1007    10
1       1001    20
1       1002    20
1       1003    20
1       1004    20
1       1005    20
1       1006    20
1       1007    20
1       1001    30
1       1001    40
RESULT
DV_ID   FUNC_ID TEMP_KEY
1       1001    10
1       1001    20
查询和结果都是正确的

如果您尝试在VB.NET中使用缓存的datatable和select执行相同的查询,您将得到相反的结果

我的意思是,如果你尝试第一个查询,你会得到第二个查询的结果,如果你尝试第二个查询, 您将得到第一个查询的结果,就像AND和OR被颠倒一样

当然,LINQ工作得又快又完美


这是一个我应该指向Microsoft团队的bug吗?

很可能不是。请提供一个复制这种行为的示例项目。@Luca,你所说的反向结果到底是什么意思?你的意思是,你得到的行是DV_ID 1,还是其他什么?@dsolimano,正如你所看到的,查询之间唯一的区别是AND和or,我的意思是,在哪里有or,我得到AND结果,在哪里有AND,我得到or结果,这真的很愚蠢