Допустим, у меня есть таблица Customer
с полем PrimaryContactId
и полем SecondaryContactId
. Оба они являются внешними ключами, которые ссылаются на таблицу Contact
. Для любого данного клиента может быть сохранен один или два контакта. Другими словами, PrimaryContactId
никогда не может быть NULL
, но SecondaryContactId
может быть NULL
.
Если я перетащу свои таблицы Customer
и Contact
на поверхность конструирования "Linq to SQL Classes", конструктор классов обнаружит две зависимости FK от таблицы Customer
до таблицы Contact
, и поэтому сгенерированный класс Customer
будет иметь поле Contact
и поле Contact1
(которое я могу переименовать в PrimaryContact
и SecondaryContact
, чтобы избежать путаницы).
Теперь предположим, что я хочу получить подробную информацию обо всех контактах для данного набора клиентов.
Если бы всегда был ровно один контакт , я мог бы написать что-то вроде:
from customer in customers
join contact in contacts on customer.PrimaryContactId equals contact.id
select ...
... что бы перевести на что-то вроде:
SELECT ...
FROM Customer
INNER JOIN Contact
ON Customer.FirstSalesPersonId = Contact.id
Но , потому что я хочу объединить оба поля контакта, я хочу, чтобы SQL выглядел примерно так:
SELECT ...
FROM Customer
INNER JOIN Contact
ON Customer.FirstSalesPersonId = Contact.id OR Customer.SecondSalesPersonId = Contact.id
Как мне написать выражение Linq для этого?