[英]Parameterize database column names in controller action
我想要一个 controller 动作“ProfessorStatus”,它查询“Professor”表并返回特定学校的活跃教授列表。
这是我的 controller 操作,我正在努力参数化“学校”列
public ActionResult ProfessorStatus(string schoolType)
{
var activeProfessors = (from p in prof.ProfessorTable.Where(a => a.Engineering.Value == true)
group p by p.ProfessorID into g
select g.Key).ToList();
return View(activeProfessors);
}
现在,在上面的 controller 动作中。 我想用“schoolType”参数化它,而不是硬编码“Engineering”。
所以如果我通过 schoolType = Medicine 那么 controller 将显示来自医学院的教授等其他学校类型。
我怎样才能避免在这里硬编码? 提前致谢。
您的数据库设计不佳。
您应该有一个单独的表将教授映射到学校,而不是为每所学校提供 boolean 列,其中包含教授 ID 和学校名称或 ID 的列。
然后你可以写
prof.ProfessorTable.Where(p => p.Schools.Any(ps => ps.School = schoolType))
如果你真的只需要教授ID,你也可以写
prof.ProfessorSchools.Where(ps => ps.School = schoolType)
.Select(ps => ps.ProfessorId)
如果您不在 position 中重新设计您的整个数据库和使用它的系统,您仍然可以通过使用表达式来解决这个问题。
public ActionResult ProfessorStatus(string schoolType) {
Expresison<Func<Professor, bool>> filter;
switch (schoolType) {
case "Engineering":
filter= a => a.Engineering.Value == true;
break;
default:
throw new Exception("Unknown SchoolType - " + schoolType);
}
var activeProfessors = (from p in prof.ProfessorTable.Where(filter)
group p by p.ProfessorID into g
select g.Key).ToList();
return View(activeProfessors);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.