Левое внешнее соединение - PullRequest
0 голосов
/ 08 июня 2011
List<ServicePacksDTO> allServicePacks = new List<ServicePacksDTO>();
        using (var db = new DataContext())
        {
            allServicePacks=(
                    from sp in db.ServicePacks
                    join st in db.States.DefaultIfEmpty() on sp.State_id equals st.State_Id
                    join type in db.ServiceTypes on sp.ServiceType_Id equals type.ServiceType_Id
                    where
                     (type.ServiceType_desc.ToLower() == "accepted") 
                    orderby sp.AustState_id
                    select sp.ToServicePacksDTO(db)).ToList();
        }

Текущий код работает нормально, пока я не попытаюсь выполнить внешнее соединение по состоянию.Есть ли далеко, чтобы сделать это легко?

1 Ответ

0 голосов
/ 08 июня 2011

Ну, во-первых, вам нужно предоставить немного больше деталей, которые "работают нормально, пока я не попытаюсь сделать хх".

Что не работает?Есть ли ошибка?Неожиданные результаты?

Забыть о проекции DTO и объединении db.ServiceTypes, чтобы выполнить LOJ между db.ServicePacks и db.States, сделать это:

var x = (from sp in db.ServicePacks
join st in db.States on sp.State_id equals st.State_id into spst
from x in spst.DefaultIfEmpty()
select new { /* fields */ }
).ToList();

Попробуйте сначала, сделайтеубедитесь, что это работает (это должно быть), а затем добавьте другое соединение и проекцию.

...