Заполнение коллекции в списке

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

Вот краткое изложение того, что я пытаюсь сделать

  1. У меня есть список людей (ICollection of Person) и список адресов (ICollection of Address)
  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()
                };
    

2 ответа

Я думаю, что ваша ошибка в инициализаторе вашего объекта. Вы должны установить свойства следующим образом:

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

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

var result = People.GroupJoin(addressList, p => p.Id, a => a.PersonId, 
                                (p, addresses) => new Person {
                                         Id = p.Id,
                                         name = p.Name,
                                         addresses = addresses });
Другие вопросы по тегам