C# LINQ Where, Any

Program :

var persons1 = new List<Person>()
{
new Person("Ivan", 20),
new Person("Angelina", 16),
new Person("Vladimir", 24),
new Person("Evgeniy", 12)
};

var persons2 = new List<Person>()
{
new Person("Adam", 22),
new Person("Bob", 17),
new Person("David", 16),
new Person("Alfredo", 17)
};

var team1 = new Team("team1", persons1, 1992);
var team2 = new Team("team2", persons2, 1983);

List<Company> companies = new List<Company>()
{
new Company("company1", team1),
new Company("company2", team2)
};

var query = companies.Select(company => new
{
    Id = company.Team.TeamId,
    Name = company.Team.TeamName,
    Created = company.Team.Created,
    Users = company.Team.Persons.Where(x => x.Experience > 15)
}).OrderByDescending(entity => entity.Created).Select(entity => new
{
    Id = entity.Id,
    TeamName = entity.Name,
    Users = entity.Users.ToList()
}).GroupBy(entity => entity.TeamName);

foreach (var teams in query)
{
    foreach (var team in teams)
    {
        Console.WriteLine($"Id : {team.Id} | Team name : {team.TeamName}");

        foreach (var user in team.Users)
        {
            Console.WriteLine($"{user.FirstName} | Experience : {user.Experience}");
        }

        Console.WriteLine();
    }
}

Classes :

internal class Company
{
    public int CompanyId;
    public string CompanyName;
    public Team Team;
    public static int counterId = 1;

    public Company(string companyName, Team teams)
    {
        CompanyId = counterId++;
        CompanyName = companyName;
        Team = teams;
    }
}

internal class Team
{
    public int TeamId;
    public string TeamName;
    public List<Person> Persons;
    public int Created;
    public static int counterId = 1;

    public Team(string teamName, List<Person> persons, int created)
    {
        TeamId = counterId++;
        TeamName = teamName;
        Persons = persons;
        Created = created;
    }
}

internal class Person
{
    public int PersonId;
    public string FirstName;
    public int Experience;
    public static int counterId = 1;

    public Person(string firstName, int experience)
    {
        PersonId = counterId++;
        FirstName = firstName;
        Experience = experience;
    }
}

Интересует строчка кода : Users = company.Team.Persons.Where(x => x.Experience > 15) Так я записываю в список тех юзеров у которых опыт больше 15, а как сделать так чтобы записывалась компания только та у которой ВСЕ сотрудники с опытом > 15 ? то есть если один из них меньше опытом - тогда компанию не нужно записывать. Пробовал с .All() играться, но там возвращает bool, вообщем с этим LINQ запутался уже к концу вечера и голова не варит, может кто подскажет?


Ответы (0 шт):