Get the largest value inside linq select

3

Is there any way I can get the highest value of a select do linq field within decimal? , as per the code below?

MaxValor = Math.Max(CF.Janeiro, CF.Fevereiro, CF.Marco, CF.Abril, CF.Maio, CF.Junho, CF.Julho, CF.Agosto, CF.Setembro, CF.Novembro, CF.Dezembro),



 CamposFormImport = CForm
 .Select(CF => new VwCamposFormulario
 {
     IdCampoModelo = CF.IdCampoModelo,
     Janeiro = (CF.Janeiro + (CF.Janeiro * Porcentagem)),
     Fevereiro = (CF.Fevereiro + (CF.Fevereiro * Porcentagem)),
     Marco = (CF.Marco + (CF.Marco * Porcentagem)),
     Abril = (CF.Abril + (CF.Abril * Porcentagem)),
     Maio = (CF.Maio + (CF.Maio * Porcentagem)),
     Junho = (CF.Junho + (CF.Junho * Porcentagem)),
     Julho = (CF.Julho + (CF.Julho * Porcentagem)),
     Agosto = (CF.Agosto + (CF.Agosto * Porcentagem)),
     Setembro = (CF.Setembro + (CF.Setembro * Porcentagem)),
     Outubro = (CF.Outubro + (CF.Outubro * Porcentagem)),
     Novembro = (CF.Novembro + (CF.Novembro * Porcentagem)),
     Dezembro = (CF.Dezembro + (CF.Dezembro * Porcentagem)),
     Media = CF.Total != 00M ? ((CF.Total / 12) + ((CF.Total / 12) * Porcentagem)) : 0,
     MaxValor = Math.Max(CF.Janeiro, CF.Fevereiro, CF.Marco, CF.Abril, CF.Maio, CF.Junho, CF.Julho, CF.Agosto, CF.Setembro, CF.Novembro, CF.Dezembro),
 })
 .ToList();

As far as I can see the Max method only supports two parameters, in this case I can not use the GroupBy do linq.

    
asked by anonymous 16.12.2015 / 19:49

1 answer

4

You can use multiple calls from Math.Max to resolve this:

MaxValor = Math.Max(CF.Janeiro, Math.Max(CF.Fevereiro, ..., Math.Max(CF.Novembro, CF.Dezembro)...))

Or use an additional method that does this for you:

static decimal MaxExtended(params decimal[] args)
{
    return args.Aggregate(0m, (d1, d2) => Math.Max(d1, d2));
}

And use it in the Select expression:

MaxValor = MaxExtended(CF.Janeiro, CF.Fevereiro, ..., CF.Dezembro)
    
16.12.2015 / 20:06