Convert SQL script to Linq

Asked

Viewed 87 times

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 code in Linq, but incomplete, because it is not performing the sum of the Savings:

 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});

1 answer

4


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)
                       });

It changes a little what you just did.

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

Fiddle’s complete 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);
    }
}
  • Bah, look at that hahaha

  • We are too much today kkkkkk. Put as an answer, got very good.

  • Capable, the query is just like yours.

Browser other questions tagged

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