簡體   English   中英

LinQ 的多重左連接和內連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM