LINQ - 所有列的最大值 - 创建单个"row"



想要这样做,但作为一个单独的表达式:

var maxYearVolumes = volumes.Where(v => v.YEAR == maxYear);
maxYearVolumes.Max(v => v.JAN_VOLUME);
maxYearVolumes.Max(v => v.FEB_VOLUME);
maxYearVolumes.Max(v => v.MAR_VOLUME);
maxYearVolumes.Max(v => v.APR_VOLUME);
maxYearVolumes.Max(v => v.MAY_VOLUME);
maxYearVolumes.Max(v => v.JUN_VOLUME);
maxYearVolumes.Max(v => v.JUL_VOLUME);
maxYearVolumes.Max(v => v.AUG_VOLUME);
maxYearVolumes.Max(v => v.SEP_VOLUME);
maxYearVolumes.Max(v => v.OCT_VOLUME);
maxYearVolumes.Max(v => v.NOV_VOLUME);
maxYearVolumes.Max(v => v.DEC_VOLUME);

需要一个单一的";行";用每个的最大值填充这些属性。

正如@juharr在评论中提到的,你可以用一个常数分组,然后取每个值的最大值

var maxYearVolumes = volumes
.Where(v => v.YEAR == maxYear)
.GroupBy(v => 1)
.Select(g => new {
Jan = g.Max(v => v.JAN_VOLUME),
Feb = g.Max(v => v.FEB_VOLUME),
Mar = g.Max(v => v.MAR_VOLUME),
Apr = g.Max(v => v.APR_VOLUME),
May = g.Max(v => v.MAY_VOLUME),
Jun = g.Max(v => v.JUN_VOLUME),
Jul = g.Max(v => v.JUL_VOLUME),
Aug = g.Max(v => v.AUG_VOLUME),
Sep = g.Max(v => v.SEP_VOLUME),
Oct = g.Max(v => v.OCT_VOLUME),
Nov = g.Max(v => v.NOV_VOLUME),
Dec = g.Max(v => v.DEC_VOLUME),
})
.First();

如果您正在使用Linq-To对象,并且担心性能问题,可以使用.Aggregate,但只编写一个普通的foreach循环可能会更容易。

最新更新