В c#, при использовании оператора LINQ 'GroupBy', я бы хотел отсортировать ключи в указанном порядке.
Мой сценарий основан на футболе, и я хочу отсортировать игроков по заранее определенной позиции (созданной и установленной в CMS). Позиции, которые могут быть назначены игроку, следующие, и они могут быть сгруппированы только в одного
- вратаря
- защитника
- полузащитника
- нападающего
Player.cs (вниз)
public string Name {get; set;}
public string ImgUrl {get; set;}
public string Position {get; set;}
PlayersLandingPageViewModel.cs (вниз)
public IEnumerable<IGrouping<string, TeamPlayerPage>> GroupedPlayersList { get; set; }
PlayersLandingPageController (вниз)
var groupedPlayersList = teamPlayersLandingPage.Children<TeamPlayerPage>().GroupBy(x => x.Position);
var playersLandingPageViewModel = new PlayersLandingPageViewModel(model.Content)
{
GroupedPlayersList = groupedPlayersList
};
Вышеприведенный код возвращает IEnumerable<IGrouping<string, TeamPlayerPage>>
, но ключи расположены в следующем порядке (предполагается, что по умолчанию используется алфавит?) В представлении я просто перебираю каждую группу (ключ) в Model.GroupedPlayersList, а затем всех игроков в группе. Foreach внутри foreach (это работает как ожидалось)
- защитник
- вратарь
- полузащитник
- нападающий
При поиске решения в следующем посте ( как создать программный порядок сортировки в C# для сгруппированной коллекции ) предлагается использовать IComparer<String>
, но из-за отсутствия понимания я Немного неуверенный, как применить это, чтобы работать для моего сценария. Это до, с или после действия GroupBy?
List<string> playerGroupsSortOrder = new List<string>() { "goalkeeper", "defender", "midfielder", "striker"};
Может кто-нибудь что-нибудь порекомендовать? Объяснение или ссылки, которые помогут мне понять любое рабочее решение, было бы очень полезно.
другие ссылки
Спасибо