一个linq表达式中的多个GroupBy

本文关键字:GroupBy linq 表达式 一个 | 更新日期: 2023-09-27 18:02:49

我似乎无法在一个linq表达式中组合两个GroupBy语句…

现在我正在做这样的事情:

double maxInvestment = 0;
foreach (var playerAction in TotalUserActions.GroupBy(p => p.Player))
{
    var MaxInvestmentPerPlayer = playerAction.GroupBy(p => p.RoundId)
                                             .Select(p => p.LastOrDefault())
                                             .Sum(p=> p.BetSize);
    if(MaxInvestmentPerPlayer > maxInvestment)
        maxInvestment = MaxInvestmentPerPlayer;
}

我想做的是这样的…

double maxInvestment = TotalUserActions.GroupBy(p => p.Player)
                                       .GroupBy(p => p.RoundId)
                                       .Select(p => p.LastOrDefault())
                                       .Sum(p=> p.BetSize);

但这不起作用…有人能帮我一下吗?

谢谢!

一个linq表达式中的多个GroupBy

看起来这就是你想要的,关键是内部查询被包装在对Select()的外部调用中:

var maxInvestment = TotalUserActions.GroupBy(p => p.Player)
                                    .Select(g => g.GroupBy(x => x.RoundId)
                                                  .Select(x => x.LastOrDefault())
                                                  .Sum(x => x.BetSize))
                                    .Max();

我确实质疑你使用LastOrDefault(),因为你没有指定任何排序,你也可以使用FirstOrDefault(),节省跳转到最后一个元素的麻烦。