Mar*_*aro 4 c# linq group-by list
我有记录列表,每条记录都有名称和轮次. Rounds是由" - "分隔的连接数字
我如何按名称分组并仅显示唯一的回合,也计算回合的数量并显示第一轮和最后一轮
这是我试过的,
data.GroupBy(d => d.Name)
.Select(
g => new
{
Name = g.Key,
Rounds = g.Concat(s => s.Rounds),
NumberOfRounds = g.Concat(s => s.Rounds).Split('-').Count,
FirstRound = //??,
LastRound = //??,
});
Run Code Online (Sandbox Code Playgroud)
我将开始通过你的实体投影到一个名称和资源集合的回合对.那将更容易使用.例如:
var query = results
.Select(d => new { d.Name, Results = d.Rounds.Split('-').Select(int.Parse).ToList() })
.GroupBy(
d => d.Name, (key, values) => new {
Name = key,
Rounds = values.SelectMany(v => v.Rounds)
.Distinct()
.OrderBy(x => x)
.ToList()
});
Run Code Online (Sandbox Code Playgroud)
随着作为列表提供的回合,我看不出有什么意义有NumberOfRounds,FirstRound并LastRound作为属性,你可以只使用Rounds.Count,Rounds.First(),Rounds.Last().重要的是尽可能早地将数据转换为更有用的格式.
如果你真的需要在属性中,它很容易投射:
// query as before, but with
.Select(x => new {
x.Name,
x.Rounds,
NumberOfRounds = x.Rounds.Count,
FirstRound = x.Rounds.First(),
LastRound = x.Rounds.Last()
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |