2012-04-05 3 views
2

У меня есть две таблицы в моей базе данных, которые выглядят так:Как получить левое внешнее соединение в Linq?

Заказчик:

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 


мне нужен отборный результат подобного:

C_ID = '1':

C_ID = '2':

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

Как бы соответствующий Linq запрос выглядит?

Благодаря
Nahid

+0

См. Ответ на http://stackoverflow.com/questions/1122942/linq-to-sql-left-outer-join-with-multiple-join-conditions –

+4

После почти 50 вопросов вы должны начать использовать кнопку блока кода в редакторе. –

ответ

3

После предыдущего ответа, такие как Linq to Sql: Multiple left outer joins вы можете увидеть структуру для решения этой, например, что-то вроде:

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 : "") }; 

Очевидно, что если вы хотите, чтобы все записи затем снять ограничение на C_ID = 2

+0

Спасибо за Анс. Его работа ... – Nasir

+2

Может ли downvoter объяснить, почему? Поэтому LINQ работает, поэтому отвечает на вопрос. Если есть лучший подход (и может быть), тогда его ценность показывает – kaj