Aby rozszerzyć składnię łańcucha wyrażeń, odpowiedz o Clever Human:
Jeśli chcesz robić rzeczy (np. Filtrować lub wybierać) na polach z obu tabel, które są ze sobą łączone - zamiast tylko na jednej z tych dwóch tabel - możesz utworzyć nowy obiekt w wyrażeniu lambda końcowego parametru do metody Join zawierające obie te tabele, na przykład:
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 });
Interesującą częścią jest wyrażenie lambda w wierszu 4 tego przykładu:
(dc, d) => new { DealerContact = dc, Dealer = d }
... gdzie budujemy nowy obiekt typu anonimowego, który ma jako właściwości rekordy DealerContact i Dealer wraz ze wszystkimi ich polami.
Następnie możemy użyć pól z tych rekordów podczas filtrowania i wybierania wyników, jak pokazano w dalszej części przykładu, który używa dc_d
jako nazwy zbudowanego przez nas anonimowego obiektu, który ma zarówno właściwości DealerContact, jak i Dealer jako swoje właściwości.