Как сделать LEFT JOIN в LINQ to Entities? - PullRequest
7 голосов
/ 15 ноября 2011

Последние 2 дня я потратил, пытаясь выяснить, как сделать настоящее ЛЕВОЕ СОЕДИНЕНИЕ в LINQ, но у меня ничего не получилось.У меня есть пользовательская таблица, в которой есть столбец «Primary2Address», который может и часто имеет значение NULL.поэтому я должен сделать левое соединение здесь.Кроме того, в таблице адресов у меня больше отношений, которые могут быть NULL, поэтому мне приходится делать несколько LEFT JOINS.
При каждой попытке LINQ я вывожу некоторые СЕРЬЕЗНО CRAZY SQL-операторы с UNIONS, вложенные операторы SELECT и более дурацкие вещи.
Все, что мне нужно, это:

SELECT u.UserName FROM Users u 
LEFT JOIN Addresses a ON a.AddressiD = u.Primary2Address
LEFT JOIN States s ON s.StateID = a.Address2State
LEFT JOIN Countries c ON c.CountryID = a.CountryID

Пожалуйста, помогите! До сих пор мой обходной путь заключался в создании хранимой процедуры, которая использует мой SQL-оператор выше, но я бы действительнохотел бы попытаться сделать это с помощью LINQ (L2E).Спасибо, ребята!

1 Ответ

18 голосов
/ 15 ноября 2011

DefaultIfEmpty используется для левых объединений для EntityFramework 4 +

var query = from u in context.Users
            from a in context.Addresses
                             .Where(x => u.Primary2Address == x.AddressiD)
                             .DefaultIfEmpty()
            from s in context.States
                             .Where(x => a.Address2State == x.StateID)
                             .DefaultIfEmpty()
            from c in context.Countries
                             .Where(x => a.CountryID == x.CountryID)
                             .DefaultIfEmpty()
            select u.UserName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...