none
Agregar distinct a esta consulta RRS feed

  • Pregunta

  • Hola como va, tengo el siguiente caso tengo dos maquinas que registran cajas y graban cada una en una bd propia. saco información de esas maquinas de esta forma

    var query = (from c in dbcontext.PRODUCCION
                             where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP != ""
                             group c by c.ETIQUETA.Substring(0,3) into grp 
                             select new { key = grp.Key, cnt = grp.Count()}).ToList();
                             //select c).ToArray();
                var query2 = (from x in dbcontext2.PRODUCCION
                              where (x.ALTA >= buscar1 && x.ALTA <= buscar2) && x.UP != ""
                              group x by x.ETIQUETA.Substring(0, 3) into grp
                              select new { key = grp.Key, cnt = grp.Count() }).ToList();
                var aggregateQuery = from x in query.Concat(query2)
                                     group x by x.key into grp
                                     select new { key = grp.Key, cnt = grp.Sum(y => y.cnt) };

    ahora el campo ETIQUETA los 3 primeros números es el embalador de esa caja y agrupo para saber que cantidad de caja hizo cada embalador el problema es que puede darse que pasen 2 veces la misma caja, en la caja tengo un numero que es así 41200001 y lo que pretendo es que si en la base esta mas de una vez 41200001 solo me cuente y devuelva 1 desde ya gracias 

    viernes, 31 de marzo de 2017 13:47

Respuestas

  • EnzoTuc40,

    Entonces concéntrate en agrupar por el valor de la etiqueta en cada consulta y realiza la cuenta del embalador de caja en la unión de las consultas:

    var query = (from c in dbcontext.PRODUCCION
    			 where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP != ""
    			 group c by c.ETIQUETA into grp
    			 select new { key = grp.Key }).ToList();            
    var query2 = (from x in dbcontext2.PRODUCCION
    			  where (x.ALTA >= buscar1 && x.ALTA <= buscar2) && x.UP != ""
    			  group x by x.ETIQUETA into grp
    			  select new { key = grp.Key }).ToList();
    var aggregateQuery = from x in query.Concat(query2)
    					 group x by x.key.Substring(0, 3) into grp
    					 select new { key = grp.Key, cnt = grp.Count() };


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta EnzoTuc40 viernes, 31 de marzo de 2017 19:58
    viernes, 31 de marzo de 2017 17:29
  • hola

    pero entonces quieres si siempre cuente 1, podrias usar

    var query = (from c in dbcontext.PRODUCCION
    			 where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP != "" 
    			 group c by c.ETIQUETA.Substring(0,3) into grp 
    			 select new { key = grp.Key }).ToList();
    			 
    var query2 = (from x in dbcontext2.PRODUCCION
    			  where (x.ALTA >= buscar1 && x.ALTA <= buscar2) && x.UP != ""
    			  group x by x.ETIQUETA.Substring(0, 3) into grp
    			  select new { key = grp.Key }).ToList();
    			  
    var aggregateQuery = from x in query.Concat(query2)
    					 group x by x.key into grp
    					 select new { key = grp.Key, cnt = grp.Count() };

    cuenta en la query final, en las otras solo quieres saber si paso la etqiueta


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta EnzoTuc40 viernes, 31 de marzo de 2017 19:58
    viernes, 31 de marzo de 2017 17:39

Todas las respuestas

  • EnzoTuc40,

    Entonces concéntrate en agrupar por el valor de la etiqueta en cada consulta y realiza la cuenta del embalador de caja en la unión de las consultas:

    var query = (from c in dbcontext.PRODUCCION
    			 where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP != ""
    			 group c by c.ETIQUETA into grp
    			 select new { key = grp.Key }).ToList();            
    var query2 = (from x in dbcontext2.PRODUCCION
    			  where (x.ALTA >= buscar1 && x.ALTA <= buscar2) && x.UP != ""
    			  group x by x.ETIQUETA into grp
    			  select new { key = grp.Key }).ToList();
    var aggregateQuery = from x in query.Concat(query2)
    					 group x by x.key.Substring(0, 3) into grp
    					 select new { key = grp.Key, cnt = grp.Count() };


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta EnzoTuc40 viernes, 31 de marzo de 2017 19:58
    viernes, 31 de marzo de 2017 17:29
  • hola

    pero entonces quieres si siempre cuente 1, podrias usar

    var query = (from c in dbcontext.PRODUCCION
    			 where (c.ALTA >= buscar1 && c.ALTA <= buscar2) && c.UP != "" 
    			 group c by c.ETIQUETA.Substring(0,3) into grp 
    			 select new { key = grp.Key }).ToList();
    			 
    var query2 = (from x in dbcontext2.PRODUCCION
    			  where (x.ALTA >= buscar1 && x.ALTA <= buscar2) && x.UP != ""
    			  group x by x.ETIQUETA.Substring(0, 3) into grp
    			  select new { key = grp.Key }).ToList();
    			  
    var aggregateQuery = from x in query.Concat(query2)
    					 group x by x.key into grp
    					 select new { key = grp.Key, cnt = grp.Count() };

    cuenta en la query final, en las otras solo quieres saber si paso la etqiueta


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta EnzoTuc40 viernes, 31 de marzo de 2017 19:58
    viernes, 31 de marzo de 2017 17:39
  • Leandro,

    La consulta de unión debe agrupar por el código de embalador (los tres primeros caracteres del código)

    viernes, 31 de marzo de 2017 17:58
  • hola Willams

    Pero los 3 digitos ya los cortas en las queries individuales, la key que llega a la ultima linq ya tiene solo los 3 primeros digitos, entiendo no es necesario volver a cortarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 31 de marzo de 2017 18:12
  • Leandro,

    Pienso que si agrupas por los tres primeros caracteres sólo tendrás un impacto por código de embalador, y por lo que entiendo se requiere obtener la cuenta de impactos por cada código de embalador despreciando cuando el código se repite:

    CAJA-01
    0010001
    0010002
    0010003
    0010003
    0020001

    Lo que se busca es: 001 (3 impactos), 002 (1 impacto). 

    viernes, 31 de marzo de 2017 18:42
  • hola Willams

    Entiendo lo que quiere contar es la cantidad de cajas leidas, sin repeticiones y no los ensambladores que trabajan en la maquina

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 31 de marzo de 2017 19:04