2017-10-25 4 views
0

関係に参加:通常のジョインとマルチレベルLINQクエリは、私のクエリで

relations

はここに私のクエリです:

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 
      }; 

がどのように私は左このクエリ(myklienciに参加することができます。 Nexo_klient - > nexoodbiorcy.Idとmyklienci.Nexo_klient_do_faktur-> nexonabywcy.Id)?

答えて

0

参加ままにしておく必要がありもののためinto/from/in/DefaultIfEmpty()を追加します。

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 
     }; 

使用されているデータベースとLINQのバージョンによって、あなたはまた、nullをテストする必要がありますまたは条件を使用することができます

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

又は

:空であってもよい範囲変数の列参照のためにオペレータ