2011-12-08 13 views
2

ここでlinqステートメントを変更して、部分文字列が "3番目の"ユーザーを含む会社を見つけることができますか?linq string.contains子オブジェクトリストのフィールド

現時点では、文字列ではなくリスト内で一致するものを検索しているため、完全なユーザー名、つまりcontains(「第3のユーザー」)を検索する場合にのみ機能します。

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) –

関連する問題