Чтобы расширить синтаксис цепочки выражений answer от 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 как его свойства.