Добавление объединения таблиц Linq ограничивает мои результаты, потому что это действительно должно быть левое внешнее объединение - PullRequest
0 голосов
/ 26 июня 2019

У меня есть запрос, который работает хорошо, но мне нужно присоединиться к контекстной таблице, управляемой БД, которая содержит значения для идентификатора

У меня было 25 записей, но теперь только 3 записи в качествеобъединение существует только в 3 записях. Это единственная строка, которую я добавил

join roleTypes in context.ContactRoleTypes on personRole.ContactRoleTypeId equals roleTypes.ContactRoleTypeId

Я добавил в выделенную строку ContactType = p == null ? string.Empty : p.ContactRoleName,, чтобы показать результаты

findPersonResultsViewModelNew = from azed in findPersonViewModel.findPersonResultsViewModel
                        join personRole in personContactRoles on azed.PersonID equals personRole.PersonId
                        join roleTypes in context.ContactRoleTypes on personRole.ContactRoleTypeId equals roleTypes.ContactRoleTypeId
                        into r1
                        from p in r1.DefaultIfEmpty()
                        select
                        new FindPersonResultsViewModel
                        {
                            PersonID = azed.PersonID,
                            AZEDID = azed.AZEDID,
                            FirstName = azed.FirstName,
                            MiddleName = azed.MiddleName,
                            LastName = azed.LastName,
                            ContactRoleTypeId = p == null ? 0 : p.ContactRoleTypeId,                                
                            ContactType = p == null ? string.Empty : p.ContactRoleName,
                            IsInContactManager = p == null ? false : true,
                            ExistInContactManager = p == null ? false : true,
                            ActionType = p == null ? false : true,
                        };

Как выМожно видеть, что 3 источника, 2 находятся в памяти, и затем я присоединяюсь к context.ContactRoleTypes, но это должно быть левое внешнее соединение, из которого кажется, что в LINQ вы должны сделать что-то вроде from w in r2.DefaultIfEmpty()?

ОБНОВЛЕНИЕ:
Так что, если я сделаю это

join roleTypes in context.ContactRoleTypes on personRole.ContactRoleTypeId equals roleTypes.ContactRoleTypeId into r2
   from p in r1.DefaultIfEmpty()
   from g in r2.DefaultIfEmpty()

Я получу ошибку personRole does not exist in the current context.Если я поменяю их с равных, то у обеих сторон будет ошибка.

...