Я пытаюсь отсортировать список сотрудников, которые могут иметь любое количество разных ролей. Сами роли отсортированы по свойству SortOrder
, и я хочу, чтобы сотрудники сортировались в соответствии с самыми ранними из всех назначенных им ролей.
например:.
SortOrder - Role
1 - "Manager"
2 - "Graphics designer"
3 - "Server-tech-guy"
4 - "Web developer"
5 - "Coffee Machine manager"
Сотрудник может быть одновременно графическим дизайнером и управлять кофемашиной. В этом случае я хочу использовать SortOrder
роли «Графический дизайнер» при сортировке списка сотрудников.
Вот мои модели:
public class Employee
{
public int Id { get; set; }
public int BranchId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public double EmploymentPercentage { get; set; }
public double HourlyWage { get; set; }
public List<EmployeeRole> EmployeeRoles { get; set; }
public Branch Branch { get; set; }
}
public class EmployeeRole
{
public int Id { get; set; }
public int EmployeeId { get; set; }
public int RoleId { get; set; }
public Employee Employee { get; set; }
public Role Role { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public int SortOrder { get; set; }
public Branch Branch { get; set; }
}
Это мой запрос:
List<Employee> employees = await db.Employees
.Include(er => er.EmployeeRoles)
.ThenInclude(r => r.Role)
.Where(b => b.Branch.Id == BranchId)
.OrderByDescending(r => r.EmployeeRoles.Min(s => s.Role.SortOrder))
.ThenByDescending(p => p.EmploymentPercentage)
.ThenBy(n => n.LastName)
.ToListAsync();
В этом запросе я попытался найти роль с наименьшим номером SortOrder
для каждого сотрудника (.Min(s => s.Role.SortOrder)
, но он не выполняет то, что ожидал. Я получаю
InvalidOperationException: последовательность не содержит элементов.