2016-07-14 9 views
-1

Ich habe 3 Tabellen. Master, Verbraucher & Ladung. requestid ist pk für den Master, der in der Verbrauchstabelle & des Verbrauchers existiert. Verbraucherpk ist consumerid & requestID. ladung pk ist ladung id und fk ist consumer id. Ich versuche, Spalten aus allen Tabellen anzuzeigen, aber einige Consumer-IDs werden nicht angezeigt, wenn sie angezeigt werden, da in der Belastungstabelle keine Zeile darauf verweist. Ich habe versucht, links beizutreten, aber immer noch nicht angezeigt. Irgendwelche Vorschläge?Wie zeige ich einen Wert an, der in einer Tabelle vorhanden ist, aber keine Zeile an eine andere Tabelle gebunden ist, an der 3 Tabellen beteiligt sind?

Edit:

So habe ich auf herausgefunden, wie man links zu tun, kommen aber wie mache ich es, wenn für 3 Tische? Ich kann costoreid anzeigen, wenn kein Eintrag vorhanden ist, kann aber keine Rechnung erhalten, wenn kein Eintrag bei den Verbrauchern vorhanden ist. Ein Master kann einen Verbraucher haben oder nicht, und ein Verbraucher kann eine Gebühr haben oder nicht. .

var query = from m in IM.GetMaster() 

        join co in CM.GetConsumers() 
        on m.InvoiceId equals co.InvoiceId 
        join ch in CCM.GetCharge() 
        on new { co.InvoiceId, co.ConsumerId } 
        equals new { ch.InvoiceId, ch.ConsumerId } into temp 
        from ch in temp.DefaultIfEmpty() 


        select new { 
         InvioceID = m.InvoiceId, 
         ConsumerID = co == null? 0 : co.ConsumerId, 
         ChargeID = ch == null ? 0 : ch.ChargeId, 
         Amount = ch == null ? 0 : ch.Amount 
        }; 
+0

See [hier] (https://msdn.microsoft.com/en-us/library/bb311040.aspx#Anchor_2) So führen Sie linke äußere Joins in LINQ korrekt aus. –

Antwort

0

Kundentabelle sollte oben sein. Überprüfen Sie this post über left join und this one.

var query = from ConsumerEntity in consumer 
      join MasterEntityConsumerEntity in master 
        on ConsumerEntity.InvoiceId equals MasterEntity.InvoiceId 
        into tmp in MasterEntityConsumerEntity from tmp.DefaultIfEmpty() 
      join ConsumerChargeEntity in charge 
        on new { ConsumerEntity.InvoiceId, ConsumerEntity.ConsumerId } 
        equals new { ConsumerChargeEntity.InvoiceId, ConsumerChargeEntity.ConsumerId } 
        into ctmp in ConsumerChargeEntity from ctmp.DefaultIfEmpty() 
      select new 
      { 
       InvoiceID = MasterEntity.InvoiceId, 
       ConsumerID = ConsumerEntity.ConsumerId, 
       ChargeID = ConsumerChargeEntity.ChargeId, 
       Amount = ConsumerChargeEntity.Amount, 

      }; 

AKTUALISIERT

Sie sind fast in der Nähe.

Ihre Suche: 1 INNER JOIN 2 UND 2 LEFT JOIN 3
Unten Abfrage: 1 LEFT JOIN 2 UND 2 LEFT JOIN 3

var query = from m in IM.GetMaster() 
      join co in CM.GetConsumers() 
        on m.InvoiceId equals co.InvoiceId into tempCo 
        from co in tempCo.DefaultIfEmpty() 
      join ch in CCM.GetCharge() on 
        new { co.InvoiceId, co.ConsumerId } equals 
        new { ch.InvoiceId, ch.ConsumerId } into temp 
        from ch in temp.DefaultIfEmpty() 
      select new 
      { 
        InvioceID = m.InvoiceId, 
        ConsumerID = co == null? 0 : co.ConsumerId, 
        ChargeID = ch == null ? 0 : ch.ChargeId, 
        Amount = ch == null ? 0 : ch.Amount 
      }; 
+0

Ich kann es für 2 Tabellen tun, aber wie mache ich es für 3? – Scar

+0

@Scar Was meinst du? – NEER

+0

Ich meine, machen Sie eine linke Join für 3 Tabellen. 1 & 2, 2 & 3? – Scar