2014-08-29 58 views
-1

我認爲我的LINQ查詢語法是錯誤的。在列表中填充集合

這裏是什麼,我試圖做

  1. 我有人民(人的ICollection)名單和地址的列表(地址的ICollection)
  2. 一個人可以有多個簡要(因此Person有一個類型爲ICollection的Addresses屬性)
  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 2014-08-29 11:35:03

+1

你得到的錯誤是什麼? – 2014-08-29 11:35:49

+0

@CodeCaster感謝您的回覆。它不填充。沒有錯誤被拋出。我改進了我的問題 – user919426 2014-08-29 12:10:44

回答

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 2014-08-29 12:08:08

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