2017-10-25 2 views
0

Relations in meiner Anfrage:Multi-Level-Linq-Abfrage mit LEFT JOIN

relations

Hier meine Frage ist mit normalen verbindet:

var query = from myabonamenty in ArAbonamenty 
      join nexotowary in Nexo_ARWAL.Asortymenty 
      on myabonamenty.Nexo_towar equals nexotowary.Id 
      join myklienci in ArKlienci 
      on myabonamenty.Id_klient equals myklienci.Id_klient 

      join nexoodbiorcy in Nexo_ARWAL.Podmioty 
      on myklienci.Nexo_klient equals nexoodbiorcy.Id 

      join nexonabywcy in Nexo_ARWAL.Podmioty 
      on myklienci.Nexo_klient_do_faktur equals nexonabywcy.Id 

      select new 
      { 
       abonament_id = myabonamenty.Id_abonament, 
       towar=nexotowary.Nazwa, 
       nabywca= nexonabywcy.NazwaSkrocona, 
       odbiorca = nexoodbiorcy.NazwaSkrocona 
      }; 

Wie kann ich links in dieser Abfrage (myklienci verbindet machen. Nexo_klient -> nexoodbiorcy.Id und myklienci.Nexo_klient_do_faktur-> nexonabywcy.Id)?

Antwort

0

into/from/in/DefaultIfEmpty() für diejenigen hinzufügen, die links verbunden werden soll:

var query = from myabonamenty in ArAbonamenty 
     join nexotowary in Nexo_ARWAL.Asortymenty 
     on myabonamenty.Nexo_towar equals nexotowary.Id 
     join myklienci in ArKlienci 
     on myabonamenty.Id_klient equals myklienci.Id_klient 

     join nexoodbiorcy in Nexo_ARWAL.Podmioty 
     on myklienci.Nexo_klient equals nexoodbiorcy.Id into nexoodbiorcyg 
     from nexoodbiorcy in nexoodbiorcyg.DefaultIfEmpty() 

     join nexonabywcy in Nexo_ARWAL.Podmioty 
     on myklienci.Nexo_klient_do_faktur equals nexonabywcy.Id into nexonabywcyg 
     from nexonabywcy in nexonabywcyg.DefaultIfEmpty() 

     select new 
     { 
      abonament_id = myabonamenty.Id_abonament, 
      towar=nexotowary.Nazwa, 
      nabywca= nexonabywcy.NazwaSkrocona, 
      odbiorca = nexoodbiorcy.NazwaSkrocona 
     }; 

auf der Datenbank abhängig und LINQ-Version verwendet wird, können Sie für null müssen auch testen oder die bedingte verwenden Operator für Spaltenreferenzen für Bereichsvariablen, die leer sein können:

 select new 
     { 
      abonament_id = myabonamenty.Id_abonament, 
      towar=nexotowary.Nazwa, 
      nabywca= nexonabywcy?.NazwaSkrocona, 
      odbiorca = nexoodbiorcy?.NazwaSkrocona 
     }; 

oder

 select new 
     { 
      abonament_id = myabonamenty.Id_abonament, 
      towar=nexotowary.Nazwa, 
      nabywca= (nexonabywcy !=null ? nexonabywcy.NazwaSkrocona : null), 
      odbiorca = (nexoodbiorcy != null ? nexoodbiorcy.NazwaSkrocona : null) 
     };