gpt4 book ai didi

c# - 在 switch 语句中为 LINQ 创建 where 条件

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:19 25 4
gpt4 key购买 nike

所以基本上我必须为 4 个不同的角色获得 4 个不同的员工列表。 List of Roles 是一个 List of Enum,如下所示:

public enum Roles {
[Description("Level 1")]
L1,

[Description("Level 2")]
L2,

[Description("Level 3")]
L3,

[Description("Level 4")]
L4
};
  • L1可以查看L1L2L3L4<
  • L2可以查看L2L3L4
  • L3可以查看L3L4
  • L4 无权查看任何员工。

下面是我如何编写获取员工的查询。

if (!Equals(Role, Enum.GetName(typeof(GlobalMethods.Roles), 3)))
{
var _role = (GlobalMethods.Roles)Enum.Parse(typeof(GlobalMethods.Roles), Role,true);
List<EmployeeViewModel> employees = new List<EmployeeViewModel>();
switch (_role)
{
case GlobalMethods.Roles.L1:
employees = context.tblEmployees.Where(x => x.EmpID != homeViewModel.UserViewModel.EmpID).ToList().Select(x => new EmployeeViewModel
{
EmpActive = x.EmpActive,
EmpDOB = x.EmpDOB,
EmpName = x.EmpName
}).ToList();
break;
case GlobalMethods.Roles.L2:
employees= context.tblEmployees.Where(x => x.EmpID != homeViewModel.UserViewModel.EmpID).ToList().Where(x=>x.EmpRole != Enum.GetName(typeof(GlobalMethods.Roles), 0)).Select(x => new EmployeeViewModel
{
EmpActive = x.EmpActive,
EmpDOB = x.EmpDOB,
EmpName = x.EmpName,
}).ToList();
break;
case GlobalMethods.Roles.L3:
employees = context.tblEmployees.Where(x => x.EmpID != homeViewModel.UserViewModel.EmpID).ToList().Where(x.EmpRole != Enum.GetName(typeof(GlobalMethods.Roles), 0) && x.EmpRole != Enum.GetName(typeof(GlobalMethods.Roles), 1)).Select(x => new EmployeeViewModel
{
EmpActive = x.EmpActive,
EmpDOB = x.EmpDOB,
EmpName = x.EmpName,
}).ToList();
break;
default: break;
}
}

所以在上面的代码中,我有相同的 LINQ 查询,但只有 where 条件不同。有什么方法可以准备动态 where 条件并一次性获取列表?

最佳答案

这应该有效。它假设每个 GlobalMethods.Roles 都可以查看具有更大 int 值的所有角色。情况就是这样,因为角色是您声明的规则。

if (!Equals(Role, Enum.GetName(typeof(GlobalMethods.Roles), 3)))
{
var _role = (GlobalMethods.Roles)Enum.Parse(typeof(GlobalMethods.Roles), Role, true);
List<EmployeeViewModel> employees = new List<EmployeeViewModel>();
string[] viewableRoles = GetViewableRoles(_role);
employees = context.tblEmployees
.Where(x => x.EmpID != homeViewModel.UserViewModel.EmpID && viewableRoles.Contains(x.EmpRole))
.Select(x => new EmployeeViewModel
{
EmpActive = x.EmpActive,
EmpDOB = x.EmpDOB,
EmpName = x.EmpName
}).ToList();
}

private string[] GetViewableRoles(GlobalMethods.Roles userRole)
{
//Uncomment if L4 can actually view no roles, including itself.
// /if (userRole == GlobalMethods.Roles.L4)
// {
// return new string[0];
// }

IEnumerable<GlobalMethods.Roles> allRoles = Enum.GetValues(typeof(GlobalMethods.Roles)).Cast<GlobalMethods.Roles>();
return (from role in allRoles
where (int)role >= (int)userRole
select role.ToString()).ToArray();
}

关于c# - 在 switch 语句中为 LINQ 创建 where 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com