none
Convertir a LINQ Query Syntax RRS feed

  • Pregunta

  • Estimada Comunidad,

    Requiero de la siguiente ayuda, tengo este Query:

    select count(*), 
           sum(case when estado = 'A' then 1 else 0 end),
           sum(case when estado = 'V' then 1 else 0 end),
           sum(case when estado = 'E' then 1 else 0 end)
      from dctos_vincula_cli where cli_codigo = 15248

    y quiero codificarlo en LINQ Query Syntax, es posible hacerlo o debo hacer en Raw SQl Query?.

    Desde ya agradezco por su amable ayuda.

    martes, 9 de julio de 2019 22:50

Todas las respuestas

  • hola

    usas entity framework ?

    veo que filtras por cliente, pero ese cli_codigo es la key de la tabla ?


    var result = from cli in dbcontext.dctos_vincula_cli
                      where cli.cli_codigo  == 15248
                      group cli by cli.cli_codigo  into g
                      select new {
                           cantidad = g.Count(),
                           EstadoA = g.Count(x=> x.estado == "A"),
                           EstadoV = g.Count(x=> x.estado == "V"),
                           EstadoE = g.Count(x=> x.estado == "E")
                      };
                     

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 10 de julio de 2019 0:04
  • Gracias Leandro,

    Si efectivamente trabajo con EF6, 

    Con respecto al codigo del cliente es parte del primary Key, en este caso esta compuesto por 2 campos mas

    De tal manera quedo codificado asi y que retorne un array

            public static int[] GetConteoEstados(int codigoCliente, int codigoAseguradora, DateTime vigInicial)
            {
                int[] result = new int[4];

                using (RSAEntities db = new RSAEntities())
                {
                    var query = from cli in db.DCTOS_VINCULA_CLI
                                where cli.CLI_CODIGO == codigoCliente
                                   && cli.ASE_CODIGO == codigoAseguradora
                                   && cli.ANIO == vigInicial.Year
                                group cli by new { cli.CLI_CODIGO, cli.ASE_CODIGO, cli.ANIO } into g
                                select new
                                {
                                    cantTot = g.Count(),
                                    cantAct = g.Count(x => x.ESTADO == "A"),
                                    cantVin = g.Count(x => x.ESTADO == "V"),
                                    cantEli = g.Count(x => x.ESTADO == "E")
                                };

                    for (int i = 0; i < result.Length; i++)
                        result[i] = 0;

                    foreach (var item in query)
                    {
                        result[0] = Convert.ToInt32(item.cantTot);
                        result[1] = Convert.ToInt32(item.cantAct);
                        result[2] = Convert.ToInt32(item.cantVin);
                        result[3] = Convert.ToInt32(item.cantEli);
                    }

                    return result;
                }
            }

    Gracias nuevamente,

    Saludos

    miércoles, 10 de julio de 2019 16:19