none
Criar somatórios através da Lista com LINQ RRS feed

  • Pergunta

  • Bom dia Galera!

      Meu cenário é o seguinte...tenho uma lista onde possuo propriedades de valor onde quero fazer comparações e somatório.Ex:

         - Quero pegar o maior valor de uma propriedade;

         - Quero pegar o menor valor de uma propriedade;

          - Quero fazer a média de uma propriedade;

    Como poderia fazer isso com LINQ.

    quarta-feira, 26 de novembro de 2014 12:08

Respostas

  • Segue exemplo:

    Public Class ClasseTeste
    	Public Property Id() As Integer
    		Get
    			Return m_Id
    		End Get
    		Set
    			m_Id = Value
    		End Set
    	End Property
    	Private m_Id As Integer
    
    	Public Property Valor() As Decimal
    		Get
    			Return m_Valor
    		End Get
    		Set
    			m_Valor = Value
    		End Set
    	End Property
    	Private m_Valor As Decimal
    End Class

    Maior, Menor e Média:

    Dim listaTeste As New List(Of ClasseTeste)()
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 1, _
    	Key .Valor = 10 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 2, _
    	Key .Valor = 20 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 3, _
    	Key .Valor = 30 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 4, _
    	Key .Valor = 40 _
    })
    
    Dim maiorValor As Decimal = listaTeste.Max(Function(t) t.Valor)
    Dim menorValor As Decimal = listaTeste.Min(Function(t) t.Valor)
    Dim mediaValor As Decimal = listaTeste.Average(Function(t) t.Valor)

    • Marcado como Resposta Maxjv quarta-feira, 26 de novembro de 2014 13:45
    quarta-feira, 26 de novembro de 2014 12:23

Todas as Respostas

  • Ex média:

    lista.Select(x=> x.propriedade).ToList().Average();

    Ex. max ou min:

    Ordenas as listas pelo que queres da forma que queres ( asc ou desc) e seleccionas o primeiro da lista ou o ultimo.


    Não esqueça de marcar o post como útil caso tenha te ajudado.


    • Editado Marco_5 quarta-feira, 26 de novembro de 2014 12:21
    quarta-feira, 26 de novembro de 2014 12:17
  • Maxjv, seria isso?

        public class Teste
        {
            public int Valor1 { get; set; }
        }             List<Teste> testes = new List<Teste>();
                testes.Add(new Teste { Valor1 = 1 });
                testes.Add(new Teste { Valor1 = 2 });
                testes.Add(new Teste { Valor1 = 5 });

                var media = testes.Where(w => w.Valor1 == testes.Min(m => m.Valor1) || w.Valor1 == testes.Max(m => m.Valor1)).Average(a => a.Valor1);



    • Editado GuilhermeGHN quarta-feira, 26 de novembro de 2014 12:23
    quarta-feira, 26 de novembro de 2014 12:21
  • Segue exemplo:

    Public Class ClasseTeste
    	Public Property Id() As Integer
    		Get
    			Return m_Id
    		End Get
    		Set
    			m_Id = Value
    		End Set
    	End Property
    	Private m_Id As Integer
    
    	Public Property Valor() As Decimal
    		Get
    			Return m_Valor
    		End Get
    		Set
    			m_Valor = Value
    		End Set
    	End Property
    	Private m_Valor As Decimal
    End Class

    Maior, Menor e Média:

    Dim listaTeste As New List(Of ClasseTeste)()
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 1, _
    	Key .Valor = 10 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 2, _
    	Key .Valor = 20 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 3, _
    	Key .Valor = 30 _
    })
    listaTeste.Add(New ClasseTeste() With { _
    	Key .Id = 4, _
    	Key .Valor = 40 _
    })
    
    Dim maiorValor As Decimal = listaTeste.Max(Function(t) t.Valor)
    Dim menorValor As Decimal = listaTeste.Min(Function(t) t.Valor)
    Dim mediaValor As Decimal = listaTeste.Average(Function(t) t.Valor)

    • Marcado como Resposta Maxjv quarta-feira, 26 de novembro de 2014 13:45
    quarta-feira, 26 de novembro de 2014 12:23
  • Obrigado pela ajuda pessoal !
    quarta-feira, 26 de novembro de 2014 16:03