LINQ -所有列的最大值-创建单个“行”

oknwwptz  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(153)

想这样做不过作为一个单一的表达:

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);

需要一个“行”,其中这些属性用每个属性的最大值填充。

acruukt9

acruukt91#

正如@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-Objects并且担心性能问题,可以使用.Aggregate,但是编写一个普通的foreach循环可能更容易。

相关问题