Из того, что я вижу, основными препятствиями на пути рефакторинга этого в один метод являются вызовы new MemberStatus
и new MemberTeam
, в дополнение к определению подходящего репозитория для использования.
Длячтобы придумать элегантное решение, вам потребуется немного больше сконфигурированной инфраструктуры - в основном вам нужно будет разрешить правильный репозиторий в зависимости от типа, и вам понадобится фабрика для создания экземпляра объекта.
Следующее изменит код в один метод, но (на мой взгляд) не лучше, чем отдельные методы, которые у вас уже есть:
private SelectList GetSelectList<T>(int selectedId, Func<List<T>> repoAllFunc, Func<T> typeNewFunc, string idName)
{
List<T> list = repoAllFunc();
list.Insert(0, typeNewFunc());
var selectList = new SelectList(list, idName, "Name", selectedId);
return selectList;
}
Затем вы можете вызвать его так:
var memberStatusSelectList =
GetSelectList<MemberStatus>(
id,
() => _memberStatusRepository.All().ToList(),
() => new MemberStatus {StatusId = 0, Name = "All"});