VB.Net DataTable选择Bug?

时间:2012-02-21 11:39:57

标签: sql vb.net

我想我在vb .net中发现了一个错误。我不知道它是否发生在C#上(这是我的主要语言..)

我发现它是因为当我开始尖叫亵渎神灵时,我通过从数据表选择(sql方式)传递到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

此查询

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       1001    20

查询和结果都是正确的。

如果您尝试在VB.NET中执行相同的查询,使用缓存的数据表和选择,您将获得REVERSED结果..

我的意思是,如果您尝试第一个查询,您将获得第二个查询的结果,如果您尝试第二个查询, 你会得到第一个查询的结果,比如AND和OR被反转..

LINQ工作快速而完美,当然

这是一个我应该指向Microsoft Team的错误吗?

0 个答案:

没有答案