ich die folgenden Tabellen:Doing 2 Links schließt sich auf dem gleichen Tisch mit einem Anruf
Benutzer:
userId
,userFirstName
,userLastName
.
holdBilling:
bEntityID
,CarrierOID
,PayerOID
,holdTYPE
,createUserID
.
Träger:
carrierOID
,carrierName
.
Zahler:
payerOID
,payerName
.
Ich möchte den Code in einer neuen Einheit hat
holdBilling => new
{
FirstName, LastName, CarrierName, PayerName
}
Einer dieser Entitäten speichern entweder ein Zahler oder einen Trägerwert (kann nicht beides haben). Im Grunde möchte ich mit einem Anruf 2 linke Joins auf der gleichen Tabelle machen. Dies wäre die SQL-Abfrage, die für mich arbeiten würde.
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
Die temporäre Lösung, die ich gefunden habe, ist eine Liste aller für alle Zahler
select new
{
Elem = hold,
FName = u.userFirstName,
LName = u.userLastName,
Carrier = "",
Payer = p.payerName
}).ToList();
und die Zusammenlegung der beiden
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();
und ein Carriers bekommen, ich bin da zuversichtlich muss eine Lösung für beides in einer Abfrage sein.
Obwohl alle Antworten geholfen, das war derjenige, der am nächsten an der tatsächlichen Lösung war: eine kleine Verbesserung du: (c! = null)? c.carrierName: "" wurde benötigt; nicht nur für das Feld c.carrierName. Danke für die schnellen Antworten –
Kein Problem. Froh, dass ich Helfen kann :-) – Arion