我需要从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