Расширить цепочку выражений синтаксиса ответа Clever Human:
Если вы хотите что-то сделать (например, отфильтровать или выбрать) для полей из обеих таблиц, соединяемых вместе - вместо этого только для одной из этих двух таблиц - вы можете создать новый объект в лямбда-выражении конечного параметра для метода Join включая обе эти таблицы, например:
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 });
Интересной частью является лямбда-выражение в строке 4 этого примера:
(dc, d) => new { DealerContact = dc, Dealer = d }
... где мы создаем новый объект анонимного типа, который имеет в качестве свойств записи DealerContact и Dealer вместе со всеми их полями.
Затем мы можем использовать поля из этих записей при фильтрации и выборе результатов, как продемонстрировано в оставшейся части примера, который использует dc_d
в качестве имени для анонимного объекта, который мы создали, в качестве свойств которого используются как записи DealerContact, так и записи Dealer.