在列表中填充集合

时间:2014-08-29 11:32:50

标签: c# linq

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

以下是我正在尝试做的事情的简要说明

  1. 我有一份人员名单(ICollection of Person)和一份地址清单(ICollection of Address)
  2. 一个人可以有多个地址。(因此一个人有一个ICollection类型的地址属性)
  3. 每个地址还有一个PersonId,用于将其与人员
  4. 相关联
  5. 假设我有这两个集合,但Person集合没有填充地址,**我想填充地址集合...为什么下面的Linq不起作用?
  6. 它不会填充地址集合但不会抛出错误
  7. 问题是,鉴于我有两个包含数据的集合且它们具有匹配类型,是正确的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 个答案:

答案 0 :(得分:5)

我认为您的错误在于您的对象初始化程序。您应该设置如下属性:

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

答案 1 :(得分: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 });