Il y a beaucoup de questions sur SO déjà à propos des jointures à gauche dans Linq, et celles que j'ai regardées toutes utilisent le mot clé join
pour atteindre la fin désirée.A rejoint Linq?
Cela n'a aucun sens pour moi. Disons que j'ai les tables Customer
et Invoice
, liées par une clé étrangère CustomerID
sur Invoice
. Maintenant, je veux lancer un rapport contenant des informations sur les clients, plus toutes les factures. SQL serait:
select c.*, i.*
from Customer c
left join Invoice i on c.ID = i.CustomerID
D'après ce que j'ai vu des réponses sur le SO, les gens sont la plupart du temps ce qui suggère:
var q = from c in Customers
join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID
select new { c, i };
Je ne comprends vraiment pas comment cela peut être la seule façon. La relation entre Customer
et Invoice
est déjà définie par les classes LinqToSQL; Pourquoi devrais-je le répéter pour la clause join
? Si je voulais une jointure interne il aurait simplement été:
var q = from c in Customers
from i in c.Invoices
select new { c, i };
sans spécifier les champs joints!
J'ai essayé:
var q = from c in Customers
from i in c.Invoices.DefaultIfEmpty()
select new { c, i };
mais m'a donné le même résultat que si elle était une jointure interne.
N'y a-t-il pas une meilleure façon de procéder?
Eh bien soufflez-moi - vous avez raison! Maintenant, pourquoi ai-je pensé que ça ne fonctionnait pas ...? OK, humblement je redescends ... cette question résultait de mon propre malentendu. MERCI! :) –