我需要從Orders表中提取數據,這些數據未分配並且分配的訂單位於不同的表Orders_Assigned中。以下是我的Linq to Entity Code。Linq to Entity問題的左連接
問題:我沒有得到公正的未分配的訂單,而它得到雙方未分配和分配的訂單。在linq代碼下面有問題,包括和子句{和[範圍2]。[CHEM_ID] IS NULL}。有關如何在linq中將正確的sql獲取到實體代碼的任何建議。
var query = from objOrder in context.ORDERS
join objOrderAssigned in context.ORDERS_ASSIGNED
on new { key1 = objOrder.CHEM_ID, key2 = objOrder.ORDER_NBR } equals new { key1 = objOrderAssigned.CHEM_ID, key2 = objOrderAssigned.ORDER_NO } into temptbl
from temp in temptbl.DefaultIfEmpty()
where objOrder.ORDER_STATUS == "NEW"
select new Order
{
compoundid = temp.CHEM_ID,
orderno = objOrder.ORDER_NBR,
route = objOrder.ROUTE_CD,
};
當我看着到SQL資料,我看到一個where子句中失蹤,不知道我是缺少在這裏通過SQL配置文件生成上述LINQ到實體代碼
SQL :
SELECT
[Project1].[CHEM_ID] AS [CHEM_ID],
[Project1].[ORDER_NBR] AS [ORDER_NBR],
[Project1].[ROUTE_CD] AS [ROUTE_CD],
[Project1].[C1] AS [C1]
FROM (SELECT
[Extent1].[CHEM_ID] AS [CHEM_ID],
[Extent1].[ORDER_NBR] AS [ORDER_NBR],
[Extent1].[ROUTE_CD] AS [ROUTE_CD],
N'' AS [C1]
FROM [dbo].[ORDERS] AS [Extent1]
LEFT OUTER JOIN [dbo].[ORDERS_ASSIGNED] AS [Extent2] ON ([Extent1].[CHEM_ID] = [Extent2].[CHEM_ID]) AND ([Extent1].[ORDER_NBR] = [Extent2].[ORDER_NO])
WHERE 'NEW' = [Extent1].[ORDER_STATUS]
) AS [Project1]
SQL產生正確的數據
SELECT
[Project1].[CHEM_ID] AS [CHEM_ID],
[Project1].[ORDER_NBR] AS [ORDER_NBR],
[Project1].[ROUTE_CD] AS [ROUTE_CD],
[Project1].[C1] AS [C1]
FROM (SELECT
[Extent1].[CHEM_ID] AS [CHEM_ID],
[Extent1].[ORDER_NBR] AS [ORDER_NBR],
[Extent1].[ROUTE_CD] AS [ROUTE_CD],
N'' AS [C1]
FROM [dbo].[ORDERS] AS [Extent1]
LEFT OUTER JOIN [dbo].[ORDERS_ASSIGNED] AS [Extent2] ON ([Extent1].[CHEM_ID] = [Extent2].[CHEM_ID]) AND ([Extent1].[ORDER_NBR] = [Extent2].[ORDER_NO])
WHERE 'NEW' = [Extent1].[ORDER_STATUS]
and [Extent2].[CHEM_ID] IS NULL
) AS [Project1]
我相信從左至右outered臨時投放時,你應該在你查詢的選擇部分檢查空值。像(temp!= null)這樣的東西? temp.CHEM_ID:null。 – JanneP
@JanneP CHEM_ID是一個整數而非空列。我不知道如何在Select中添加上面的行,因爲它會拋出一個錯誤,指示它爲空。我需要在where語句中包含AND子句。 – user6747972