Ну, во-первых, вам нужно предоставить немного больше деталей, которые "работают нормально, пока я не попытаюсь сделать хх".
Что не работает?Есть ли ошибка?Неожиданные результаты?
Забыть о проекции 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();
Попробуйте сначала, сделайтеубедитесь, что это работает (это должно быть), а затем добавьте другое соединение и проекцию.