2013-09-30 43 views
0

我想弄清楚列表中包含子列表的列表中選擇的最有效方法。 我有兩個類:從列表中選擇屬性

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public List<Services> Services { get; set; } 
} 

public class Services 
{ 
    public int Id; 
    public string Name; 
} 

然後,我有一個方法:

 public static List<Person> GetPeople() 
     { 
      List <Services> serviceList1 = new List<Services>(); 
      List <Services> serviceList2 = new List<Services>(); 
      var service = new Services 
       { 
        Id = 1, 
        Name = "Service 1" 
       }; 

      serviceList1.Add(service); 

      service = new Services 
       { 
        Id = 2, 
        Name = "Service 2" 
       }; 
      serviceList1.Add(service); 

      service = new Services 
       { 
        Id = 3, 
        Name = "Service 3" 
       }; 
      serviceList2.Add(service); 

      service = new Services 
       { 
        Id = 4, 
        Name = "Service 4" 
       }; 
      serviceList2.Add(service); 

      List<Person> people = new List<Person>(); 
      var person = new Person 
       { 
        FirstName = "Bill", 
        LastName = "Murray", 
        Services = serviceList1 
       }; 
      people.Add(person); 

      person = new Person 
      { 
       FirstName = "Chevy", 
       LastName = "Chase", 
       Services = serviceList2 
      }; 
      people.Add(person); 

      return people //Where Service Id = 3 
     } 

我想回到人列表,其中每個項目包括服務3作爲一種服務。 我應該使用SelectMany還是where子句。我似乎無法做到。

回答

3

如果你拼了,你應該是非常有: 查找誰擁有服務ID爲所有的人3

return people.Where(p => p.Services.Any(s => s.Id == 3)).ToList(); 
1

您可以使用以下方法:

return people.Where(p => p.Services.Any(service => service.Id == 3)).ToList();