在列表中填充集合

本文关键字:集合 填充 列表 | 更新日期: 2023-09-27 18:20:02

我认为我的LINQ查询语法错误。

以下是我尝试做的简要介绍

  1. 我有一个人员列表(人员集合)和一个地址列表(地址集合)
  2. 一个人可以有多个地址。(因此Person具有ICollection类型的Addresses属性)
  3. 每个地址也有一个PersonId,用于将其与一个人关联
  4. 假设我有这两个集合,但Person集合没有填充地址,并且**我想填充地址集合。。。为什么下面的林克不起作用
  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()
                };
    

在列表中填充集合

我认为您的错误在于对象初始值设定项。你应该这样设置属性:

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 });