У меня есть следующие таблицы:
Пользователи:
userId
, userFirstName
, userLastName
.
holdBilling:
bEntityID
, CarrierOID
, PayerOID
, holdTYPE
, createUserID
.
Носитель:
плательщик:
Я хочу сохранить код в новом объекте
holdBilling => new
{
FirstName, LastName, CarrierName, PayerName
}
Одна из этих сущностей имеет либо плательщика, либо стоимость перевозчика (не может иметь обе). В основном я хочу сделать 2 левых соединения на одном столе одним вызовом. Это будет SQL-запрос, который будет работать для меня.
SELECT TOP 1000 [ID]
,[bEntityID]
,c.carrierID
,c.carrierName
,p.payerID
,p.payerName
,[holdType] ( this is "C" for carrier and "P" for payer )
FROM .[dbo].[holdBilling] hb
left join dbo.payer p on hb.payerID = p.payerID
left join dbo.carrier c on hb.carrierID = c.carrierID
where [bEntityID] = 378
Временное решение, которое я нашел, это получить список всех перевозчиков
var listC = (from hold in holdBilling
join u in Users on hold.createUserID equals u.userID
join c in carrier.DefaultIfEmpty() on hold.carrierID equals c.carrierID
select new
{
Elem = hold,
FName = u.userFirstName,
LName = u.userLastName,
Carrier = c.carrierName,
Payer = ""
}).ToList();
и один для всех плательщиков
select new
{
Elem = hold,
FName = u.userFirstName,
LName = u.userLastName,
Carrier = "",
Payer = p.payerName
}).ToList();
и объединяя их, я уверен, что должно быть решение для выполнения обоих в одном запросе.