Linq to Entities присоединяется - PullRequest
2 голосов
/ 07 февраля 2011

У меня есть вопрос об объединениях при использовании Linq to Entities.Согласно документации, использование соединения без квалификатора работает как левое внешнее соединение.Однако, когда я выполняю код ниже, я получаю счетчик, возвращаемый ноль.Но если я закомментирую три строки соединения, я получу счет 1. Это будет означать, что соединение действует как внутреннее соединение.У меня два вопроса.Тот, который является внутренним или внешним по умолчанию?Во-вторых, как мне сделать другой, то есть внутренний или внешний?Ключевые слова на внутреннем и внешнем не работают.

 var nprs = (from n in db.FMCSA_NPR
                            join u in db.FMCSA_USER on n.CREATED_BY equals u.ID
                            join t in db.LKUP_NPR_TYPE on n.NPR_TYPE_ID equals t.ID
                            join s in db.LKUP_AUDIT_STATUS on n.NPR_STATUS_ID equals s.ID
                             where  n.ROLE_ID == pRoleId
                             && n.OWNER_ID == pOwnerId
                             && n.NPR_STATUS_ID == pNPRStatusId
                             && n.ACTIVE == pActive

                             select n).ToList();


                if (nprs.Count() == 0)
                    return null;

Ответы [ 2 ]

1 голос
/ 07 февраля 2011

Соединения в LINQ являются внутренними по умолчанию. Чтобы выполнить внешнее объединение, вы должны либо выполнить ручное «if-null-then», либо написать свою собственную операцию объединения.

Левый внешний пример с ручным if-null:

var query = from person in people
            join pet in pets on person equals pet.Owner into gj    //inner
            from subpet in gj.DefaultIfEmpty()
            select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };    //left outer
1 голос
/ 07 февраля 2011

соединения без ключей работают как внутренние соединения.Я не могу найти это в документации на данный момент, но я опубликую изменения, когда я это сделаю.Однако, чтобы выполнить левое внешнее соединение, вот пример из 101 LINQ Samples : http://msdn.microsoft.com/en-us/vcsharp/ee908647#leftouterjoin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...