C# 使用linq将iGroup从一个类转换为另一个类
我有两个班,一个队,一个队C# 使用linq将iGroup从一个类转换为另一个类,c#,linq,c#-4.0,linq-to-objects,C#,Linq,C# 4.0,Linq To Objects,我有两个班,一个队,一个队 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; } } pu
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; }
}
我有一个PlayerTeam
的列表,它按PlayerTeam
进行分组,如下所示
var groupedPlayers = teams
.OrderBy(x => x.PlayerName)
.GroupBy( x => x.PlayerTeam)
.ToList();
它的类型是List
,但我希望它的类型是List
,因为我不希望每一行都有冗余的键信息
我怎么可能做到呢?我只能在I分组
上想到类似.ConvertAll()
的东西。我也做不到
有没有有效的方法可以做到这一点?如果您可以更改分组,我只需要使用:
var groupedPlayers = teams
.OrderBy(x => x.PlayerName)
.GroupBy(x => x.PlayerTeam, Players.FromPlayerTeam)
.ToList();
其中Players.FromPlayerTeam
是Players
中的一个静态方法,它接受PlayerTeam
并返回Players
此外,我建议使用
ToLookup
而不是GroupBy
-aLookup
正是您想要的,而不必费心于ToList
调用。这不是测试,只是一个想法。
如果您在将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();
var groupedPlayers=newlist();
分组球员=团队
.OrderBy(x=>x.PlayerName)
.GroupBy(x=>x.PlayerTeam,Players.FromPlayerTeam)
.Select(x=>x.Key)//我觉得你的PlayerTeams
类很奇怪-它不只是由Player
和球队名称组成的吗?为什么你有单独的属性?@JonSkeet:我正在修改一个已经构建的应用程序。这是问题的抽象,我拥有的两个类的道具名称确实不同。一个是Linq2SQL类,另一个是前面创建的映射器类;如果有什么看起来不寻常的事情,最好解释一下。此外,您是否必须使用现有分组,或者您是否可以更改分组的起始代码?好的。我将尝试查找。同样的方法也适用于转换数据的查找?@naveen:是-您可以为键指定一个投影,为元素指定一个投影。明白了。查找速度非常快。(这对我也有帮助。多谢。