Left join in Linq?

Es gibt eine Menge von Fragen auf, SO dass bereits über Left-joins in Linq und die, die ich habe verwenden alle die join Schlüsselwort für die Erreichung der gewünschten Ende.

Dies ist jedoch nicht sinnvoll für mich. Sagen wir, ich habe die Tabellen Customer und Invoice, verbunden durch eine foreign key - CustomerID auf Invoice. Jetzt möchte ich einen Bericht ausführen, mit Kunden-info, plus Rechnungen. SQL wäre:

select c.*, i.*
  from Customer c
  left join Invoice i on c.ID = i.CustomerID

Von dem, was ich gesehen habe, die Antworten SO, die Menschen sind meist darauf hindeutet:

var q = from c in Customers
        join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID 
        select new { c, i };

Ich verstehe wirklich nicht, wie das sein kann die einzige Möglichkeit. Die Beziehung zwischen Customer und Invoice ist bereits definiert durch die LinqToSQL Klassen; warum sollte ich wiederhole es für die join - Klausel? Wenn ich wollte ein inner join wäre es einfach gewesen:

var q = from c in Customers
        from i in c.Invoices
        select new { c, i };

ohne die Angabe der verknüpften Felder!

Habe ich versucht:

var q = from c in Customers
        from i in c.Invoices.DefaultIfEmpty()
        select new { c, i };

aber das gerade gab mir das gleiche Ergebnis, als ob es ein "inner join".

Gibt es nicht einen besseren Weg, dies zu tun?

InformationsquelleAutor Shaul Behr | 2009-07-07

Schreibe einen Kommentar