2011-01-25 2 views
1

У меня есть список объектов, эти объекты могут иметь или не иметь контактную информацию:LINQ Присоединяйтесь и GroupJoin

  // Join contact 
     query = query.Join(
     (new ContactRepository(this.Db)).List().Where(x => x.IsMainContact), 
     x => new { x.ListItem.ContentObject.LoginId }, 
     y => new { y.LoginId }, 
     (x, y) => new ListItemExtended<ListItemFirm> 
     { 
      City = y.City, 
      State = y.State, 
      Country = y.Country 
     }); 

Это делает внутреннее соединение на «LoginID». Но мне нужно соединение с ауттером, чтобы, если контактная информация не существует для данного LoginId, она будет пустой. Пожалуйста, помогите

благодаря

ответ

1

Вы должны выполнить внешнее соединение вручную:

  var contacts = (new ContactRepository(this.Db)).List(); 
      query.Select(item => 
      { 
       var foundContact = contacts.FirstOrDefault(contact => contact.Id == item.Id); 
       return new ListItemExtended<ListItemFirm>() 
        { 
         Id = item.Id, 
         City = foundContact != null ? foundContact.City : null, 
         State = foundContact != null ? foundContact.State : null, 
         Country = foundContact != null ? foundContact.Country : null, 
        }; 
      }) 

Но помните, что если ваш контакт деталь структура - проверка на нуль не является правильным способом. Используйте оператор Any() вместо FirstOrDefault().

Смежные вопросы