2017-08-11 72 views
0

我嘗試將SQL查詢轉換爲LINQ,我不知道爲什麼相同的查詢(對我來說也是一樣)返回不同的結果。有人可能知道什麼是錯的?這些查詢有什麼區別?我的SQL語句與LinqPad SQL語句。差異在哪裏?

-- Region Parameters 
DECLARE @p0 DateTime = '2017-08-10 00:00:00.000' 
DECLARE @p1 DateTime = '2017-08-11 00:00:00.000' 
DECLARE @p2 Int = 100 
DECLARE @p3 NVarChar(1000) = 'N02' 
DECLARE @p4 NVarChar(1000) = 'VVV' 
-- EndRegion 
SELECT COUNT(*) AS [Count], [t6].[idComm_Employee] AS [IdEmployee] 
FROM (
    SELECT [t4].[idComm_Employee] 
    FROM [tabComm_Item] AS [t0] 
    INNER JOIN [tabMES_Order] AS [t1] ON [t0].[idComm_Item] = [t1].[idComm_Item] 
    INNER JOIN [tabMES_Order_Line] AS [t2] ON ([t1].[idMES_Order] = [t2].[idMES_Order]) AND ([t1].[idMES_Order_Sequence] = [t2].[idMES_Order_Sequence]) 
    INNER JOIN [tabHIST_Employee_Orders] AS [t3] ON ([t2].[idMES_Order] = [t3].[idMES_Order]) AND ([t2].[idMES_Order_Sequence] = [t3].[idMES_Order_Sequence]) 
    INNER JOIN [tabHIST_Employee] AS [t4] ON ([t3].[idComm_Employee] = [t4].[idComm_Employee]) AND ([t3].[idHIST_WorkPlace] = [t4].[idHIST_WorkPlace]) 
    INNER JOIN [tabHIST_WorkPlace] AS [t5] ON [t4].[idHIST_WorkPlace] = [t5].[idHIST_WorkPlace] 
    WHERE ([t5].[DateTimeFrom] > @p0) AND ([t5].[DateTimeTo] < @p1) AND ([t1].[idMES_Order_Typ] = @p2) AND ([t2].[idERP_Workcenter] <> @p3) AND ([t2].[idERP_Workcenter] <> @p4) 
    GROUP BY [t4].[idComm_Employee], [t0].[MachineTyp] 
    ) AS [t6] 
GROUP BY [t6].[idComm_Employee] 

而且我

SELECT RESULT.idComm_Employee, COUNT(RESULT.MachineTyp) 
FROM 
    (SELECT THE.idComm_Employee, TCI.MachineTyp 
    FROM 
     tabComm_Item AS TCI 
     INNER JOIN tabMES_Order AS TMO 
     ON TCI.idComm_Item = TMO.idComm_Item 
     INNER JOIN tabMES_Order_Line AS TMOL 
     ON TMO.idMES_Order = TMOL.idMES_Order AND TMO.idMES_Order_Sequence = TMOL.idMES_Order_Sequence 
     INNER JOIN tabHIST_Employee_Orders AS THEO 
     ON TMOL.idMES_Order = THEO.idMES_Order AND TMOL.idMES_Order_Sequence = THEO.idMES_Order_Sequence AND TMOL.idMES_Order_Line = THEO.idMES_Order_Line 
     INNER JOIN tabHIST_Employee AS THE 
     ON THEO.idComm_Employee = THE.idComm_Employee AND THEO.idHIST_WorkPlace = THE.idHIST_WorkPlace 
     INNER JOIN tabHIST_WorkPlace AS THWP 
     ON THE.idHIST_WorkPlace = THWP.idHIST_WorkPlace 
    WHERE 
     THWP.DateTimeFrom > '2017-08-10' AND THWP.DateTimeTo < '2017-08-11' AND TMO.idMES_Order_Typ = 100 AND TMOL.idERP_Workcenter <> 'N02' AND TMOL.idERP_Workcenter <> 'VVV' 
    GROUP BY THE.idComm_Employee, TCI.MachineTyp) AS RESULT 
GROUP BY RESULT.idComm_Employee 

我的查詢返回122行,LINQ 130在LINQ查詢此表達式:

AND ([t2].[idERP_Workcenter] <> @p3) AND ([t2].[idERP_Workcenter] <> @p4) 

被忽略

+2

考慮將每個查詢的返回結果的快照與您的問題一起添加進一步說明 – eshirima

回答

1

沒有看到示例數據和表結構很難確定,但是在第二個查詢中,您將加入到tabHIST_Employee_Orders表中使用附加謂詞:

AND   TMOL.idMES_Order_Line = THEO.idMES_Order_Line 

即謂詞不存在於所述第一查詢,其可以很好引起的兩個查詢之間的結果的差。

+0

我是盲人。我查看了六個小時的查詢,但我沒有看到這一點。非常感謝你。 – Krzysztof