2014-08-29 2 views
-1

Я думаю, что мой синтаксис запроса LINQ неверен.Заполнение коллекции в списке

Вот краткое о том, что я пытаюсь сделать

  1. У меня есть список людей (ICollection от лица) и список адресов (ICollection из адреса)
  2. Человек может иметь несколько адреса (так что у человека есть свойство Addresses типа ICollection)
  3. Каждый адрес также имеет PersonId, чтобы связать его с Лицом
  4. Предполагая, что у меня есть эти две коллекции, но в коллекции Person нет адресов, и * * Я хочу заполнить адресную коллекцию ... почему ниже Linq не работает?
  5. Он не заполняет коллекцию адресов, но бросает никакой ошибки
  6. Вопроса есть, учитывая, что у меня есть и коллекция с данными, и они имеют соответствующие типы, синтаксис запроса Linq ниже правильного?

    // people is an ICollection<Person> 
    
    // addressList is an ICollection<Address> 
    
    var query = from person in People 
          select new Person 
          { 
           Id = person.Id, 
           Name = person.Name, 
           adresses = (from address in addressList 
              where address.PersonId == person.Id 
              select address).ToList() 
          }; 
    
+8

Мы можем задать этот вопрос вам. Почему это не работает? Вы получили сообщение об ошибке? – CodeCaster

+1

Какая ошибка вы получаете? –

+0

@CodeCaster спасибо, что ответили. Он не заполняется. Ошибка не возникает. Я улучшил свой вопрос – user919426

ответ

5

Я думаю, ваша ошибка в вашем объекте initializer.You должны установить свойства, как это:

select new Person 
{ 
    Id = person.Id, 
    Name = person.Name, 
    adresses = (from address in addressList 
       where address.PersonId == person.Id 
       select address).ToList() 
}; 
+0

Hi @ Selman22 Жаль, что это была моя ошибка в примере. Я исправил это. Вы были бы правы, хотя – user919426

1

Я хотел бы предложить использовать .GroupJoin, чтобы сделать работу:

var result = People.GroupJoin(addressList, p => p.Id, a => a.PersonId, 
           (p, addresses) => new Person { 
             Id = p.Id, 
             name = p.Name, 
             addresses = addresses }); 
Смежные вопросы