Convert SQL script to Linq

2

I need to convert the SQL script below to Linq.

SELECT 
    [ID_Pessoa], 
    [ID_ArquivoPagamento], 
    SUM([Peculio_Valor]) AS 'Peculio_Valor' 

FROM [VW_PESSOA] 
WHERE   [ID_Pessoa] = @ID_Pessoa AND 
        [ID_ArquivoPagamento] = @ID_ArquivoPagamento  
GROUP BY [ID_Pessoa], [ID_ArquivoPagamento]

Below the Linq code, but incomplete, because it is not performing the sum of the Peculio:

 var reg = (from p in db.VW_PESSOA
            where 
            p.ID_Pessoa == item.ID_Pessoa && 
            p.ID_ArquivoPagamento == ID_ArquivoPagamento
            select new 
            {
                ID_Pessoa = p.ID_Pessoa,
                ID_ArquivoPagamento = p.ID_ArquivoPagamento,
                Peculio_Valor = p.Peculio_Valor
            }).GroupBy(p => new { p.ID_Pessoa, p.ID_ArquivoPagamento});
    
asked by anonymous 08.12.2015 / 19:03

1 answer

4

It would look like this:

var reg = (from p in list
                       where
                       p.ID_Pessoa == item.ID_Pessoa &&
                       p.ID_ArquivoPagamento == ID_ArquivoPagamento
                       group p by new { p.ID_Pessoa, p.ID_ArquivoPagamento } into g
                       select new
                       {
                           ID_Pessoa = g.Key.ID_Pessoa,
                           ID_ArquivoPagamento = g.Key.ID_ArquivoPagamento,
                           Peculio_Valor = g.Sum(x=>x.Peculio_Valor)
                       });

Change what you did just for yourself.

I did a Fiddle for you to see how it would look, notice how the List is mounted, Where is fixed in the variable to make it easier to understand.

Fiddle full code here:

using System;
using System.Linq;
using System.Collections.Generic;


public class Program
{
    class VW_PESSOA
        {
            public string ID_Pessoa;
            public string ID_ArquivoPagamento;
            public int Peculio_Valor;
        }

    public static void Main()
    {
        List<VW_PESSOA> list = new List<VW_PESSOA>();

            list.Add(new VW_PESSOA() { ID_Pessoa = "1", ID_ArquivoPagamento = "2", Peculio_Valor= 10 });
            list.Add(new VW_PESSOA() { ID_Pessoa = "1", ID_ArquivoPagamento = "2", Peculio_Valor = 10 });
            list.Add(new VW_PESSOA() { ID_Pessoa = "4", ID_ArquivoPagamento = "3", Peculio_Valor = 10 });

            var reg = (from p in list
                       where
                       p.ID_Pessoa == "1" &&
                       p.ID_ArquivoPagamento == "2"
                       group p by new { p.ID_Pessoa, p.ID_ArquivoPagamento } into g
                       select new
                       {
                           ID_Pessoa = g.Key.ID_Pessoa,
                           ID_ArquivoPagamento = g.Key.ID_ArquivoPagamento,
                           Peculio_Valor = g.Sum(x=>x.Peculio_Valor)
                       })
                       .ToList()
                       ;

        Console.WriteLine("Reparar em como o List foi montado para entender porque o resultado é 20.");
        Console.WriteLine("A soma de Peculio_Valor onde todos os IDs = 1 e ID_arquivoPagamento = 2 é: " + reg.First().Peculio_Valor);
    }
}
    
08.12.2015 / 19:13