Advertisement
JulianoRoberto

Untitled

Apr 20th, 2021
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. private List<dynamic> CalcAgrupamento(string tipoCalc, string tipoAgrupamento, DataTable histPeriodo)
  2. {
  3. var agrupamento = new List<dynamic>();
  4.  
  5. if (tipoAgrupamento != "Bloco" &&
  6. tipoAgrupamento != "Fazenda")
  7. return null;
  8.  
  9. var objAgrupar =
  10. tipoAgrupamento == "Fazenda"
  11. ? new { IDFazenda = Convert.ToInt32(d["IDFazenda"]), Bloco = 0 }
  12. : new { IDFazenda = Convert.ToInt32(d["IDFazenda"]), Bloco = d["Bloco"] }
  13.  
  14. var agrupado =
  15. histPeriodo.AsEnumerable()
  16. .GroupBy(d => objAgrupar);
  17.  
  18. switch (tipoCalc)
  19. {
  20. case "Soma":
  21. agrupamento = agrupado.Select(x => (dynamic)new { valor = x.Sum(r => r.Field<double>("Valor")), chave = x.Key.IDFazenda }).ToList();
  22. break;
  23. case "Média Simples":
  24. agrupamento = agrupado.Select(x => (dynamic)new { valor = x.Average(r => r.Field<double>("Valor")), chave = x.Key.IDFazenda }).ToList();
  25. break;
  26. case "Máximo":
  27. agrupamento = agrupado.Select(x => (dynamic)new { valor = x.Max(r => r.Field<double>("Valor")), chave = x.Key.IDFazenda }).ToList();
  28. break;
  29. case "Mínimo":
  30. agrupamento = agrupado.Select(x => (dynamic)new { valor = x.Min(r => r.Field<double>("Valor")), chave = x.Key.IDFazenda }).ToList();
  31. break;
  32. case "Média ponderada (área)":
  33. agrupamento = agrupado.Select(x => (dynamic)new { valor = x.Sum(r => r.Field<double>("Valor") / r.Field<double>("AreaTotal")) / x.Sum(r => r.Field<double>("AreaTotal")), chave = x.Key.IDFazenda }).ToList();
  34. break;
  35.  
  36. return agrupamento;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement