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 запутался уже к концу вечера и голова не варит, может кто подскажет?