2011-02-07 3 views
2

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

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; 

ответ

1

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

+0

Это лучший ответ. Чтобы быть более точным, код –

1

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

левой внешний пример с инструкцией по эксплуатации, если-нуль:

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