繁体   English   中英

在 controller 操作中参数化数据库列名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM