Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

linq string.contains on field of child object list

How can the linq statement here be altered so that it finds the company(s) containing the user with the substring of "third"?

At the moment it only works when searching for the full user name i.e. contains("third user") because it is searching for a match in the list, not the string.

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();
    }
}
like image 474
user1087450 Avatar asked Oct 10 '22 06:10

user1087450


1 Answers

You should call string.Contains on the user.Name:

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

See it working online: ideone

like image 187
Mark Byers Avatar answered Oct 13 '22 10:10

Mark Byers