using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var participantes = new List<Participante>();
participantes.Add(new Participante(1));
participantes.Add(new Participante(2));
participantes.Add(new Participante(3));
participantes.Add(new Participante(4));
var notasFiscais = new List<NotaFiscal>();
notasFiscais.Add(new NotaFiscal(1, 8000, "Example"));
notasFiscais.Add(new NotaFiscal(2, 7000, "Example"));
notasFiscais.Add(new NotaFiscal(3, 5000, "Example"));
notasFiscais.Add(new NotaFiscal(4, 6000, "Example"));
notasFiscais.Add(new NotaFiscal(5, 9000, "Example"));
notasFiscais.Add(new NotaFiscal(6, 10000, "Example"));
notasFiscais.Add(new NotaFiscal(1, 8000, "Example"));
notasFiscais.Add(new NotaFiscal(2, 7000, "Example"));
notasFiscais.Add(new NotaFiscal(3, 5000, "Example"));
notasFiscais.Add(new NotaFiscal(4, 6000, "Example"));
notasFiscais.Add(new NotaFiscal(5, 9000, "Example"));
var notasFiscaisOrdenadas = notasFiscais
.Where(x => participantes.Any(y => y.ParticipanteID == x.ClienteID))
.GroupBy(z => z.ClienteID)
.Select(x => new NotaFiscal(){
ClienteID = x.First().ClienteID,
ValorTotalNota = x.Sum(n => n.ValorTotalNota)
})
.OrderByDescending(x => x.ValorTotalNota)
.Take(5);
foreach(var item in notasFiscaisOrdenadas){
Console.WriteLine($"Id: {item.ClienteID} \n ValorTotalNota: {item.ValorTotalNota} \n");
}
}
}
public class NotaFiscal {
public int ClienteID {get;set;}
public decimal ValorTotalNota {get;set;}
public string NomeCliente {get;set;}
public NotaFiscal(int clienteId, decimal valorTotalNota, string nomeCliente) {
this.ClienteID = clienteId;
this.ValorTotalNota = valorTotalNota;
this.NomeCliente = nomeCliente;
}
public NotaFiscal(){
}
}
public class Participante {
public Participante(int participanteId){
this.ParticipanteID = participanteId;
}
public int ParticipanteID {get;set;}
}