如何在Linq中订购组结果?

Pur*_*ome 40 linq group-by sql-order-by

我有以下linq查询,它工作正常.我不确定我是如何订购该组的结果的.

from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
select new { UserId = g.Key, Score = g.Sum(x => x.Score) }
Run Code Online (Sandbox Code Playgroud)

结果目前由UserId升序排序.我在分数下降之后.

谢谢 :)

Arj*_*nbu 65

只需添加orderby子句;-)

from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
let score = g.Sum(x => x.Score)
orderby score descending
select new { UserId = g.Key, Score = score };
Run Code Online (Sandbox Code Playgroud)

  • "let"允许我在orderby子句之前定义聚合,以便我可以对它进行实际排序!辉煌!这怎么不是常识?!从现在开始,我会写这样的所有linq查询.很酷的是,您的方法支持MULTI-sort与各种排序方向.例如"orderby g.Key.UserId升序,得分降序"建议通过链接OrderBy(),ThenBy()和OrderByDescending()来包装查询,之后可能导致多个查询而不是一个查看,看起来不像SQL.仅供参考:您可以通过在第一个下方添加另一个"let"语句来添加更多聚合! (2认同)

Pra*_*dda 13

var results =
 (from a in Audits
join u in Users on a.UserId equals u.UserId
group a by a.UserId into g
select new { UserId = g.Key, Score = g.Sum(x => x.Score) })
.OrderByDescending(p=>p.Score);
Run Code Online (Sandbox Code Playgroud)

希望这会解决你的问题,比顶一个更容易;)

干杯