【发布时间】:2015-02-16 13:36:27
【问题描述】:
数据库示意图(实际列名和表名不同)
EmployeeeID IsSicked IsRetired IsHoliday
1 false false true
2 true false true
3 true true true
4 false false false
我有什么问题?
我的应用程序中有一个 IsSicked、IsRetired 和 IsHoliday 复选框,允许用户检查多项选择并提交。
系统将根据用户的选择从数据库中返回员工列表。例如,当用户勾选 IsSicked 和 IsRetired 时,系统将返回从数据库中患病和退休的用户列表。
根据下面的代码,我需要编写 2^3 = 8 种可能性来得到结果。 随着列扩展到 n 列(不包括employeeID 列),我需要编写 2^n if else 语句来获取查询。 如果有 10 列(10 个复选框选择),那么我需要写 2^10 = 1024 if else 语句
在我看来,这应该是开发人员面临的一个相当普遍的问题,不幸的是我在网上找不到很好的解决方案
期待解决方案
C# 代码和/或 LINQ 查询的通用组合,无需硬编码如下逻辑 if(...) else if (...)
var employee = db.Employee.AsQueryable():
if(model.IsSicked == true)
{
employee.Where(z => z.IsSicked == true)
}
else if(model.IsRetired == true)
{
employee.Where(z => z.IsRetired == true)
}
...
...
else if(model.IsSicked == true && model.IsRetired == true)
{
employee.Where(z => z.IsSick == true || z.IsRetired == true)
}
else if (model.IsSicked == true && model.IsRetired == true && model.IsHoliday == true)
{
employee.Where(z => z.IsSick == true || z.IsRetired == true || z.IsHoliday == true)
}
【问题讨论】:
标签: c# asp.net-mvc linq asp.net-mvc-4 linq-to-entities