Pour étendre la réponse de la syntaxe de la chaîne d'expression par Clever Human:
Si vous vouliez faire des choses (comme filtrer ou sélectionner) sur les champs des deux tables jointes - au lieu d'une seule de ces deux tables - vous pourriez créer un nouvel objet dans l'expression lambda du paramètre final de la méthode Join incorporant ces deux tableaux, par exemple:
var dealerInfo = DealerContact.Join(Dealer,
dc => dc.DealerId,
d => d.DealerId,
(dc, d) => new { DealerContact = dc, Dealer = d })
.Where(dc_d => dc_d.Dealer.FirstName == "Glenn"
&& dc_d.DealerContact.City == "Chicago")
.Select(dc_d => new {
dc_d.Dealer.DealerID,
dc_d.Dealer.FirstName,
dc_d.Dealer.LastName,
dc_d.DealerContact.City,
dc_d.DealerContact.State });
La partie intéressante est l'expression lambda à la ligne 4 de cet exemple:
(dc, d) => new { DealerContact = dc, Dealer = d }
... où nous construisons un nouvel objet de type anonyme qui a pour propriétés les enregistrements DealerContact et Dealer, ainsi que tous leurs champs.
Nous pouvons ensuite utiliser les champs de ces enregistrements pendant que nous filtrons et sélectionnons les résultats, comme le montre le reste de l'exemple, qui utilise dc_d
comme nom pour l'objet anonyme que nous avons construit qui a à la fois les enregistrements DealerContact et Dealer comme propriétés.