Как извлечь список отделов и их средние значения зарплат из таблицы, содержащей поля для имени, отдела и заработной платы?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Нужно показать, что данные можно сгруппировать по отделу и посчитать среднюю зарплату для каждой группы. В C# это обычно делают через LINQ: GroupBy + Average. В результате получают не список сотрудников, а агрегированный список по отделам.
Определение:
Для извлечения списка отделов и их средних зарплат из таблицы сначала данные группируют по полю отдела, а затем для каждой группы вычисляют среднее значение зарплаты. В C# это удобно делать через LINQ, потому что он позволяет выразить группировку и агрегацию в одном запросе.
Пример использования:
Допустим, есть список сотрудников с полями Name, Department и Salary. Нужно получить результат вида: Sales — 120000, IT — 150000.
using System;
using System.Collections.Generic;
using System.Linq;
public class Employee
{
public string Name { get; set; }
public string Department { get; set; }
public decimal Salary { get; set; }
}
public class Program
{
public static void Main()
{
var employees = new List<Employee>
{
new Employee { Name = "Иван", Department = "IT", Salary = 120000 },
new Employee { Name = "Анна", Department = "IT", Salary = 180000 },
new Employee { Name = "Петр", Department = "Sales", Salary = 100000 },
new Employee { Name = "Мария", Department = "Sales", Salary = 140000 }
};
var result = employees
.GroupBy(e => e.Department)
.Select(g => new
{
Department = g.Key,
AverageSalary = g.Average(e => e.Salary)
});
foreach (var item in result)
{
Console.WriteLine($"{item.Department}: {item.AverageSalary}");
}
}
}
Пояснение кода:
Код не требует отдельной логики помимо LINQ, потому что задача решается через группировку и агрегацию.
GroupBy(e => e.Department)— объединяет сотрудников по отделу.g.Key— это название текущего отдела.g.Average(e => e.Salary)— вычисляет среднюю зарплату внутри группы.Select(...)— преобразует группы в удобный для вывода анонимный объект.- В
foreachрезультат печатается построчно.
Ключевые моменты:
GroupByиспользуется, когда нужно собрать записи по общему признаку.Averageприменяется к числовому полю внутри каждой группы.- Такой запрос можно выполнять как в памяти, так и над данными из ORM, если провайдер поддерживает перевод LINQ в SQL.
- Если в отделе может не быть сотрудников, среднее по пустой группе нужно обрабатывать отдельно, иначе будет исключение.
- Для зарплаты лучше использовать
decimal, а неdouble, чтобы избежать ошибок округления.