我有两个班级Teams和PlayerTeams
public class PlayerTeams
{
public int ID { get; set; }
public string PlayerName { get; set; }
public string PlayerCountry { get; set; }
public bool IsActive { get; set; }
public string PlayerTeam { get; set; }
}
public class Players
{
public int ID { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public bool? Status { get; set; }
}
我有一个PlayerTeams
列表,按PlayerTeam
分组。
var groupedPlayers = teams
.OrderBy(x => x.PlayerName)
.GroupBy( x => x.PlayerTeam)
.ToList();
类型为List<IGrouping<string, PlayerTeams>>
,但我希望它类型为List<IGrouping<string, Players>>
,因为我不希望每行都有冗余的密钥信息。
我怎么可能实现这一目标?我只能在.ConvertAll()
上想到IGrouping
之类的内容。我也无法做到。
有没有一种有效的方法来做到这一点?
答案 0 :(得分:1)
如果您可以更改分组,我只会使用:
var groupedPlayers = teams
.OrderBy(x => x.PlayerName)
.GroupBy(x => x.PlayerTeam, Players.FromPlayerTeam)
.ToList();
其中Players.FromPlayerTeam
是Players
中的静态方法,它采用PlayerTeam
并返回Players
。
此外,我建议使用ToLookup
代替GroupBy
- Lookup
正是您想要的,而不必费心ToList
来电。
答案 1 :(得分:0)
这不是一个想法。
如果您将linq语句(期望IGrouping
类型)转换为字符串列表时遇到问题,那么您可能必须先选择。
var groupedPlayers = new List<string>();
groupedPlayers = teams
.OrderBy(x => x.PlayerName)
.GroupBy(x => x.PlayerTeam, Players.FromPlayerTeam)
.Select(x => x.Key) // << added select
.ToList();