2012-04-05 9 views
2

Ich habe zwei Tabellen in meiner Datenbank, die so aussehen:Wie bekomme ich die linke äußere Verbindung in Linq?

Kunde:

C_ID city 
-------------- 
1  Dhaka 
2  New york 
3  London 

personal_info:

P_ID C_ID Field  value 
------------------------------- 
1  1  First Name Nasir 
2  1  Last Name Uddin 
3  2  First Name Jon 
4  3  First Name Lee 


Ich brauche eine ausgewählte Ergebnis wie folgt aus:

C_ID = '1':

C_Id = '2':

C_ID Name (First Name + Last Name) City 
--------------------------------------------- 
2  Jon       New york 

Wie würde die Linq Abfrage aussehen entspricht?

Dank
Nahid

+0

Siehe die Antwort für http://stackoverflow.com/questions/1122942/linq-to-sql-left-outer-join-with-multiple-join-conditions –

+4

Nach fast 50 Fragen Sie sollten die Codeblock-Schaltfläche im Editor verwenden. –

Antwort

3

einer früheren Antwort Nach wie Linq to Sql: Multiple left outer joins Sie die Struktur zur Lösung dieses Beispiel so etwas wie sehen:

var result = from customer in customers 
        from personalFirst in personal 
         .Where(pf => pf.Field == "First Name" && pf.C_ID == customer.C_ID) 
         .DefaultIfEmpty() 
        from personalLast in personal 
         .Where(pl => pl.Field == "Last Name" && pl.C_ID == customer.C_ID) 
         .DefaultIfEmpty() 
        where customer.C_ID == 2 
        select new { customer.C_ID, Name = (personalFirst != null ? personalFirst.Value : "") + " " + (personalLast != null ? personalLast.Value : "") }; 

Natürlich, wenn Sie alle Datensätze wollen dann die Einschränkung entfernen auf C_Id = 2

+0

Danke für Ans. Es funktioniert .... – Nasir

+2

Könnte der Downvoter bitte erklären warum? Der LINQ funktioniert also also beantwortet die Frage. Wenn es einen besseren Ansatz gibt (und es gibt), dann lohnt es sich, es zu zeigen – kaj

Verwandte Themen