[英]C# LINQ Join Error
SELECT PART_TYPE.PART_TYPE_ID,
PART_TYPE.PART_TYPE_NAME,
PART_AVAILABILITY.DATE_REF,
PART_TYPE.VEHICLE_ID,
PART_AVAILABILITY.AVAIL_COUNT
FROM PART_AVAILABILITY
RIGHT JOIN PART_TYPE
ON PART_AVAILABILITY.PART_TYPE_ID = PART_TYPE.PART_TYPE_ID
AND PART_AVAILABILITY.VEHICLE_ID = PART_TYPE.VEHICLE_ID
where PART_TYPE.VEHICLE_ID = 366
PART_TYPE_ID
和VEHICLE_ID
是PART_TYPE
表中的Primary Key
。 VEHICLE_ID
是来自VEHICLE
表的Foreign Key
。
DATE_REF
, PART_TYPE_ID
和VEHICLE_ID
是PART_AVAILABILITY
表中的Primary Key
。 VEHICLE_ID
和PART_TYPE_ID
是PART_TYPE
表中的Foreign Key
。
上面的查询给出了下面的输出。
PART_TYPE_ID PART_TYPE_NAME DATE_REF VEHICLE_ID AVAIL_COUNT
5 A1 2013-06-20 00:00:00.000 366 1
6 B1 2013-06-20 00:00:00.000 366 2
7 C1 2013-06-20 00:00:00.000 366 1
8 D1 NULL 366 NULL
9 E1 NULL 366 NULL
16 F1 2013-06-20 00:00:00.000 366 1
这是我上面的sql查询的linq
查询。
var vehiclePartType = from pa in context.PART_AVAILABILITY
join pt in context.PART_TYPE
on pa.PART_TYPE_ID equals pt.PART_TYPE_ID into joined
from j in joined.DefaultIfEmpty()
where j.VEHICLE_ID == 366
select new
{
PART_TYPE = j,
PART_AVAILABILITY = pa
};
但是linq查询给出了以下输出。
PART_TYPE_ID PART_TYPE_NAME DATE_REF VEHICLE_ID AVAIL_COUNT
5 A1 2013-06-20 00:00:00.000 366 1
6 B1 2013-06-20 00:00:00.000 366 2
7 C1 2013-06-20 00:00:00.000 366 1
16 F1 2013-06-20 00:00:00.000 366 1
NULL
记录丢失。
我该如何解决?
LINQ中的Right Join是通过反转join语句完成的,因此正确的选择是:
var vehiclePartType = from pt in context.PART_TYPE
join pa in context.PART_AVAILABILITY on pt.PART_TYPE_ID equals pa.PART_TYPE_ID into joined
from j in joined.DefaultIfEmpty()
where pt.VEHICLE_ID == 366
select new
{
PART_TYPE = pt,
PART_AVAILABILITY = j
};
我认为您必须交换表。 实际上,您正在执行的操作是左连接。 要转换成正确的,只需交换表,如::
{
var vehiclePartType = from
pt in context.PART_TYPE join pa in context.PART_AVAILABILITY
on pt.PART_TYPE_ID equals pa.PART_TYPE_ID into joined
from j in joined.DefaultIfEmpty()
where j.VEHICLE_ID == 366
select new
{
PART_TYPE = j,
PART_AVAILABILITY = pa
};
}
我对LINQ不太熟悉,但是在您的SQL查询中
AND PART_AVAILABILITY.VEHICLE_ID = PART_TYPE.VEHICLE_ID
这在您的LINQ查询中丢失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.