Per estendere la risposta della sintassi della catena di espressioni di Clever Human:
Se volessi fare cose (come filtrare o selezionare) sui campi di entrambe le tabelle che vengono unite insieme - invece su una sola di quelle due tabelle - potresti creare un nuovo oggetto nell'espressione lambda del parametro finale al metodo Join incorporando entrambe queste tabelle, ad esempio:
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 parte interessante è l'espressione lambda nella riga 4 di quell'esempio:
(dc, d) => new { DealerContact = dc, Dealer = d }
... dove costruiamo un nuovo oggetto di tipo anonimo che ha come proprietà i record DealerContact e Dealer, insieme a tutti i loro campi.
Possiamo quindi utilizzare i campi di tali record mentre filtriamo e selezioniamo i risultati, come dimostrato dal resto dell'esempio, che utilizza dc_d
come nome l'oggetto anonimo che abbiamo creato che ha sia i record DealerContact che i record Dealer come proprietà.