Ich versuche, 2 Links Joins zu tun. Ich habe die Abfrage in SQL Server getestet und es funktioniert, aber ich kann die Abfrage in linq nicht neu erstellen.NullReferenceException bei der Auswahl von Links Join
Die Abfrage:
select Master.InvoiceId,Consumer.ConsumerId,ConsumerCharge.ChargeId , Amount
from Master
left outer join Consumer on
Master.InvoiceId=Consumer.InvoiceId
left outer join ConsumerCharge on
Consumer.ConsumerId = ConsumerCharge.ConsumerId and
Consumer.InvoiceId = ConsumerCharge.InvoiceId and
Master.InvoiceId = ConsumerCharge.InvoiceId
order by InvoiceId
In LINQ:
var query = from m in IM.GetMaster()
join co in CM.GetConsumers()
on m.InvoiceId equals co.InvoiceId into temp2
from co in temp2.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()
orderby m.InvoiceId
select new
{
InvioceID = m.InvoiceId,
ConsumerID = co == null ? 0 : co.ConsumerId,
ChargeID = ch == null ? 0 : ch.ChargeId,
Amount = ch == null ? 0 : ch.Amount
};
Ich erhalte
Objektverweis nicht auf eine Instanz eines Objekts festgelegt.
bei Linie on new { co.InvoiceId, co.ConsumerId, }
. Wenn ich into temp2 from co in temp2.DefaultIfEmpty()
entferne, werden zwar Rechnungs-IDs angezeigt, für die jedoch keine Verbraucher-ID angezeigt wird. Wie mache ich einen richtigen linken Join wo 3 Tische beteiligt sind?
@onedaywhen - Ich habe diese Klassen mit den angezeigten Eigenschaften erstellt. Aber ya .. vergaß zu addieren in der 'equals' die'? .' zu der 'ch' Seite - So bearbeitet :) –
@Scar - hat es dein Problem gelöst? –
Es funktioniert jetzt, danke! :) – Scar