Параметризация имен столбцов базы данных в действии контроллера - PullRequest
0 голосов
/ 01 июля 2011

Мне нужно действие контроллера «ProfessorStatus», которое запрашивает таблицу «Professor» и возвращает список активных преподавателей для конкретной школы.

Вот действие контроллера, которое я имею, я борюсь с параметризацией столбцов "Школа"

 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); 
    }

Теперь, в приведенном выше действии контроллера. Вместо жесткого кодирования «Engineering» я хочу параметризовать его с «schoolType».

Так что, если я пройду schoolType = Medicine, то на контроллере будут отображаться профессора из медицинской школы и так далее для других типов школ.

Как мне избежать жесткой записи здесь? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Ваша база данных плохо спроектирована.

Вместо того, чтобы иметь логический столбец для каждой школы, у вас должна быть отдельная таблица сопоставления профессоров со школами со столбцами для идентификатора профессора и названия или идентификатора школы.

Затем вы можете написать

prof.ProfessorTable.Where(p => p.Schools.Any(ps => ps.School = schoolType))

Если вам действительно нужен только идентификатор профессора, вы также можете написать

prof.ProfessorSchools.Where(ps => ps.School = schoolType)
                     .Select(ps => ps.ProfessorId)
1 голос
/ 01 июля 2011

Если у вас нет возможности перепроектировать всю базу данных и системы, которые ее используют, вы все равно можете обойти это, используя выражения.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...