Take the highest value within the Line select

Asked

Viewed 931 times

3

Is there any way that inside the select do linq I can take the highest value of a field of the type decimal?, according to 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();

From what I could see the method Max only has support for two parameters, in this case also I can not use the method GroupBy do linq.

1 answer

4


You can use multiple calls from Math.Max to solve 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)
  • I liked the method for being cleaner. vlw

Browser other questions tagged

You are not signed in. Login or sign up in order to post.