2011-12-08 2 views
2

"third"부분 문자열을 가진 사용자가 포함 된 회사를 찾을 수 있도록 여기서 linq 문을 변경할 수 있습니까?linq string.contains on child object list의 필드에

지금은 문자열이 아닌 목록에서 일치하는 항목을 검색하므로 전체 사용자 이름 즉 contains ("third user")를 검색 할 때만 작동합니다.

class Company 
{ 
    public Company(List<User> users) { this.Users = users; } 
    public List<User> Users { get; set; } 
} 

class User 
{ 
    public User(string name) { this.Name = name; } 
    public string Name { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Company> companies = new List<Company>(); 
     Company company1 = new Company(new List<User>(){ new User("first user"), new User("second user") }); 
     Company company2 = new Company(new List<User>() { new User("third user"), new User("fourth user") }); 
     companies.Add(company1); 
     companies.Add(company2); 

     companies = companies 
          .Where(company => company.Users.Select(user => user.Name) 
          .Contains("third")).ToList(); 
    } 
} 

답변

3

당신은 user.Namestring.Contains를 호출해야합니다 :

companies = companies 
    .Where(company => company.Users.Any(user => user.Name.Contains("third"))) 
    .ToList(); 

가 온라인으로 작업을 참조하십시오 : ideone

+0

좋아요, 감사합니다. 나는 원래 user.Name에 대해 Contains를 호출하려고 시도했지만 컴파일되지는 않습니다. 나는 이제 'Any'키워드가 누락 된 성분이라는 사실을 확인하고 그것에 대해 읽을 것이다. – user1087450

+0

키워드가 아닙니다. 확장 방법입니다. 설명서를 참조하십시오 : ['Enumerable.Any'] (http://msdn.microsoft.com/en-us/library/bb534972.aspx) –