【发布时间】:2019-01-24 22:58:32
【问题描述】:
我正在尝试对可以具有任意数量不同角色的员工列表进行排序。角色本身按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();
在这个查询中,我试图找到每个员工(.Min(s => s.Role.SortOrder))具有最低SortOrder-number 的角色,但它没有达到我的预期。我得到了
InvalidOperationException:序列不包含任何元素。
【问题讨论】:
-
创建一个数组 string[] sortOrder = {"Manager","Graphics Designer","Server-tech-guy","Web developer","Coffee Machine manager"};获取排序顺序的索引 Orderby(r => sortOrder.IndexOf(r.EmployeeRoles))
-
您的示例中唯一可以引发此异常的方法是
Min()。似乎有些员工没有角色? -
@python_kaa 是的,就是这样。查看已接受的答案。
标签: c# linq entity-framework-core