none
Duda con una consulta que no trae resultados RRS feed

  • Pregunta

  • Buenas tardes, me ha sucedido en dos ocasiones unos casos que no se por que se producen, y es lo siguiente:

    1.- Tengo el siguiente codigo:

    Mi clase:

    public class busquedax
        {
            public string codigo { get; set; }
            public string descripcion { get; set; }
        }

    Mi consulta:

    llena_grid = (from x in cp.conn.docum_cc
                                  where x.co_cli.Trim() == textBox1.Text.Trim() && x.tipo_doc == "FACT" && 
                                  x.saldo > 0 && x.anulado == false
                                  select new busquedax
                                  {
                                      codigo = x.tipo_doc, 
                                      descripcion = x.nro_doc.ToString()
                                  }).ToList();
    
                    dataGrid1.ItemsSource = llena_grid;

    El caso es que la linea: descripcion = x.nro_doc.ToString() 

    es donde se presenta el problema y es que descripción recibe un valor string pero nro_doc es int por lo que lo convierto con ToString() pero el caso es que si coloco este valor numerico que luego convierto a string no me trae ningun resultado la consulta, sin embargo si hago algo como descripcion = "FACTURAS" entonces me muestra los resultados que son, he revisado con una consulta SQL y si tengo resultados que cumplan con las condiciones que coloco, como dije antes si el valor es string me muestra  los resultados pero si es int convertido a string me dice que tengo cero registros en la consulta, lo extraño es que no me da error ni nada solo dice Cero resultados.

    Si coloco un break point en la consulta de hecho cuando uso el valor int el codigo no continua con la siguiente linea que deberia ser llenar el dataGrid pero lo pasa por alto.

    Se que puede ser algo simple, gracias por si ayuda de antemano.


    C. Zapata

    sábado, 19 de abril de 2014 16:04

Respuestas

  • Bueno estuve leyendo algunos foros y encontré una solución a mi problema la publico por si a otra persona se le presenta el mismo error.

    La solución fue crear dos consultas, pienso que esto sucede por que mi campo nro_doc es un campo clave, pero no tengo claro por que este problema:

    var llg = (from y in cp.conn.docum_cc
                                   where y.co_cli.Trim() == textBox1.Text.Trim() && y.tipo_doc == "FACT" &&
                                   y.saldo > 0 && y.anulado == false
                                   select new
                                   {
                                       cod = y.nro_doc,
                                       des = y.observa
                                   }).ToList();
    
                        llena_grid = (from x in llg
                                      select new busquedax
                                      {
                                          codigo = x.cod.ToString(),
                                          descripcion = x.des
                                      }).ToList();
    
                        dataGrid1.ItemsSource = llena_grid;

    Si existe una mejor forma mas optimizada, por favor haganme saber, al menos esto funciona.

    Gracias.

     

    C. Zapata

    • Marcado como respuesta CAZA - domingo, 20 de abril de 2014 15:09
    domingo, 20 de abril de 2014 15:09

Todas las respuestas

  • hola

    hay algo raro en lo que comentas, dices que algo en el select del linq hace que no devuelva registros, eso es muy raro

    no sera algo en el where que pasa si quitas la parte del

    where x.co_cli.Trim() == textBox1.Text.Trim() && x.tipo_doc == "FACT" && x.saldo > 0 && x.anulado == false

    para que devuelva registros sin filtro

    ademas no lo comentas pero usas entity framework ?

    Si coloco un break point en la consulta de hecho cuando uso el valor int el codigo no continua con la siguiente linea que deberia ser llenar el dataGrid pero lo pasa por alto.

    no sera que estas obteniendo un error, que pasa si defines un try...catch para capturarlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 19 de abril de 2014 19:17
  • Buen día, gracias Leonardo por responder, te comento que si eso de quitarle el where lo hice también y es lo mismo la consulta me trae cero resultados cuando dejo el valor de descripción asi:

    descripcion = x.nro_doc.ToString()

    sin embargo cuando hago algo para probar como asignarle un valor cualquiera por ejemplo "PRUEBA" a descripción si me trae los valores de mi consulta como es debido.

    Si uso EF en VS2010, como mencionaba arriba si consulto en sql directo con las condiciones del where me trae los resultados que deben de ser.

    Tienes otra idea de otra cosa que pueda hacer?

    Gracias.


    C. Zapata

    domingo, 20 de abril de 2014 14:15
  • Otra cosa que te puedo mencionar es que esto lo tengo en el evento Window_Activated. Tiene algo que ver??

    C. Zapata

    domingo, 20 de abril de 2014 14:19
  • Hice una prueba y lo cambie del evento Windows_Activated a un evento el el click de un boton a ver que sucedía, ademas comente todo el where para no tener esta duda y ahora me da un mensaje que dice lo siguiente:

    LINQ to Entities no reconoce el método 'System.String ToString()' del método, y este método no se puede traducir en una expresión de almacén.

    He estado leyendo algunos foros y veo que este es un tema muy controversial no se todavía por que? 

     

    C. Zapata

    domingo, 20 de abril de 2014 14:52
  • Bueno estuve leyendo algunos foros y encontré una solución a mi problema la publico por si a otra persona se le presenta el mismo error.

    La solución fue crear dos consultas, pienso que esto sucede por que mi campo nro_doc es un campo clave, pero no tengo claro por que este problema:

    var llg = (from y in cp.conn.docum_cc
                                   where y.co_cli.Trim() == textBox1.Text.Trim() && y.tipo_doc == "FACT" &&
                                   y.saldo > 0 && y.anulado == false
                                   select new
                                   {
                                       cod = y.nro_doc,
                                       des = y.observa
                                   }).ToList();
    
                        llena_grid = (from x in llg
                                      select new busquedax
                                      {
                                          codigo = x.cod.ToString(),
                                          descripcion = x.des
                                      }).ToList();
    
                        dataGrid1.ItemsSource = llena_grid;

    Si existe una mejor forma mas optimizada, por favor haganme saber, al menos esto funciona.

    Gracias.

     

    C. Zapata

    • Marcado como respuesta CAZA - domingo, 20 de abril de 2014 15:09
    domingo, 20 de abril de 2014 15:09