我有一张车辆表,我需要在VehicleAttribute上进行左连接。Linq左加入实体框架
var vehicle = (from v in context.Vehicles
//join vehicleAttributes
join va in context.VehicleAttributes on v.VehicleId equals va.VehicleId into vAttributes
from vehicleAttributes in vAttributes.DefaultIfEmpty()
where v.VehicleId == vehicleId
select new { v, vehicleAttributes });
迄今为止好。 VehicleAttribute也有一个AttributeId列。我只需要加入这些VehicleAttributes当它在这个列表中:
List<Guid> allowedAttributes = (from ua in context.UserAttributes
where ua.UserId == UserSession.CurrentUser.UserId
select ua.AttributeId).ToList();
我该怎么做?我认为子查询可能是正确的方法,但我很挣扎..
感谢您的所有答案。
编辑:一种不同的方法来解释我的问题: 我有这两个查询
SELECT Vehicle.VehicleId,VehicleAttribute.AttributeId
FROM Vehicle
LEFT JOIN VehicleAttribute
ON Vehicle.VehicleId = VehicleAttribute.VehicleId
SELECT UserAttribute.AttributeId
FROM UserAttribute
WHERE UserAttribute.UserId = '4D0F8AD2-7A4D-4E29-A6D3-E5FCD6075388'
,并希望将它们组合,所以我只得到id属性的这是在第二个查询。 A where子句不起作用,因为即使没有任何属性ID,我仍然需要vehicleId
你更应该使用带有导航属性EF而不是显式连接。我认为你有你的映射设置正确,因为他们没有显示在这里... –
你的第一个代码片段不完整,有未定义的标识符。你能发布整个查询吗? – qJake
当然我更新了我的帖子:-) – Timothy