[英]Multiple Left Join and Inner Join with LinQ
我有這個工作的 SQL 代碼:
SELECT
FF.numero,
FF.cuo_pla,
FF.num_pla,
PN.Descripcion,
TN.Nombre
FROM encf EF
JOIN forf FF
ON EF.numero = FF.numero
AND EF.[manual] = FF.[manual]
AND EF.comproba = FF.comproba
AND EF.tipo_fac = FF.tipo_fac
AND EF.sucursal = FF.sucursal
LEFT JOIN Planes PN
ON FF.num_pla = PN.Numero
LEFT JOIN Tarjetas TN
ON PN.IdTarjeta = TN.ID
WHERE
EF.documento = 123456789
有兩個 LEFT JOIN 和一個 INNER JOIN。 我知道如何進行內部聯接,但不知道如何使需要在第一個內部聯接中獲得的 id 的兩個左聯接。 我正在做這樣的事情:
var queryEncFor = from enc in db.encf
join forF in db.forf on
new
{
JoinProperty1 = enc.numero,
JoinProperty2 = enc.manual,
JoinProperty3 = enc.comproba,
JoinProperty4 = enc.tipo_fac,
JoinProperty5 = enc.sucursal
}
equals
new
{
JoinProperty1 = forFact.numero,
JoinProperty2 = forFact.manual,
JoinProperty3 = forFact.comproba,
JoinProperty4 = forFact.tipo_fac,
JoinProperty5 = forFact.sucursal
}
where enc.documento == doc
select new UnionEncForFact
{
numero = enc.numero,
cuo_pla = forF.cuo_pla == null ? 0 : forF.cuo_pla.Value,
num_pla = forF.num_pla
};
內連接它的工作,但我不知道如何翻譯兩個左連接,有什么建議嗎?
根據 Microsoft 文檔,查詢將是:
var queryEncFor = (from enc in db.encf
join forF in db.forf on
new
{
enc.numero,
enc.manual,
enc.comproba,
enc.tipo_fac,
enc.sucursal
}
equals
new
{
forF.numero,
forF.manual,
forF.comproba,
forF.tipo_fac,
forF.sucursal
}
join plane in db.Planes on forF.num_pla equals plane.Numero into leftedPlanes
from leftedPlane in leftedPlanes.DefaultIfEmpty()
join tarjeta in db.Tarjetas on leftedPlane?.IdTarjeta equals tarjeta.ID into leftedTarjetas
from leftedTarjeta in leftedTarjetas.DefaultIfEmpty()
where enc.documento == 1
select new UnionEncForFact
{
numero = enc.numero,
cuo_pla = forF.cuo_pla == null ? 0 : forF.cuo_pla.Value,
num_pla = forF.num_pla,
Descripcion = leftedPlane?.Descripcion,
Nombre = leftedTarjeta?.Nombre ?? 0
}).ToList();
我希望你覺得這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.