Mam dwie następujące metody, które pobierają dane z mojej bazy danych i zwracają wypełniony obiekt SelectList (w tym wartość opcji "Wszystkie"), które następnie przekazuję do mojego widoku. Problem polega na tym, że są prawie identyczne, z wyjątkiem tego, że oba mają dostęp do różnych obiektów repozytorium i mają różne nazwy identyfikatorów (StatusId i TeamId). Wydaje mi się, że istnieje sposobność, aby je przekształcić w jedną metodę, która akceptuje repozytorium jako parametr i w jakiś sposób określa, jaka powinna być nazwa identyfikatora, być może za pomocą refleksji lub pewnego rodzaju wyrażenia lambda, ale nie wiem jak aby to osiągnąć.Refactor dwie metody, które generują SelectList w jedną metodę
private SelectList GetStatusSelectList(int selectedStatusId)
{
List<MemberStatus> statusList = _memberStatusRepository.All().ToList();
statusList.Insert(0, new MemberStatus {StatusId = 0, Name = "All"});
var statusSelectList = new SelectList(statusList, "StatusId", "Name", selectedStatusId);
return statusSelectList;
}
private SelectList GetTeamSelectList(int selectedTeamId)
{
List<MemberTeam> teamList = _memberTeamRepository.All().ToList();
teamList.Insert(0, new MemberTeam { TeamId = 0, Name = "All" });
var teamSelectList = new SelectList(teamList, "TeamId", "Name", selectedTeamId);
return teamSelectList;
}
Czy ktoś może pomóc w ustaleniu, w jaki sposób można je przekształcić w jedną metodę?
Czy możesz edytować te klasy, np. Dodawać interfejs? –
Tak ... zarówno _memberTeamRepostiory, jak i _memberStatusRepository implementują interfejs IRepository. Ten interfejs ma wszystkie metody interakcji z bazą danych, w tym metody takie jak IQueryable All(), która po prostu zwraca _dbSet danej TEntity. –
bigmac
jak o MemberTeam i MemberStatus - czy możesz modyfikować je bezpośrednio lub przy pomocy klas częściowych? – foson