【发布时间】:2020-04-22 07:36:13
【问题描述】:
在 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(按预期工作)
- 后卫
- 守门员
- 中场
- 前锋
在寻找解决方案时,以下帖子 (how can i create a programmatically sort order in C# on a grouped collection) 建议使用IComparer<String>,但由于缺乏理解,我有点不确定如何将其应用于我的场景。是在 GroupBy 操作之前、之后还是之后?
List<string> playerGroupsSortOrder = new List<string>() { "goalkeeper", "defender", "midfielder", "striker"};
有人可以推荐什么吗?帮助我理解任何有效解决方案的解释或链接将非常有帮助。
其他参考
- https://support.microsoft.com/en-gb/help/320727/how-to-use-the-icomparable-and-icomparer-interfaces-in-visual-c
- 这是我正在使用的 Umbraco 8.6 解决方案
谢谢
【问题讨论】:
标签: c# asp.net-mvc list linq umbraco