我想我在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的错误吗?