none
Consulta de Linq condicional usando CompareTo() RRS feed

  • Pregunta

  • Buenas tardes, estoy haciendo una consulta sencilla en Linq 

    List<c_fichas> fic = (from w in conex.conn.Trabajadores
                                      where (w.cod_trab.Trim().CompareTo(cod_trab_d) >= 0) &&
                                            (w.cod_trab.Trim().CompareTo(cod_trab_h) <= 0) 
                                      select new c_fichas
                                      {
                                          cod_trab = w.cod_trab,
                                          nombre_completo = w.nombre_completo
                                      }).ToList();
     

    El asunto esta en el Where, que si cod_trab_d y cod_trab_h tienen valores la consulta funciona perfecta me trae los valores que están en medio de esos dos parámetros incluyendo esos dos. pero quiero hacer que si están en blanco ("") me los muestre todos y si en caso esta lleno solo uno de ellos también me lo tome en cuenta, por ejemplo si solo le paso el parámetro cod_trab_d y es "005" me muestre de ese valor hasta el ultimo que exista, y si solo esta lleno cod_trab_h me los muestre todos (los registros) hasta ese valor.

    Desde ya agradezco su valiosa colaboración.


    C. Zapata

    martes, 18 de marzo de 2014 22:05

Respuestas

  • ¿Puede ser que le estés pasando un parámetro que en lugar de ser un string vacío sea un null? La comparación cod_trab_d=="" devolvería false si cod_trab_d fuera null en lugar de ser "".
    • Marcado como respuesta CAZA - jueves, 20 de marzo de 2014 21:04
    jueves, 20 de marzo de 2014 6:41

Todas las respuestas

  • Puedes conseguir el efecto deseado poniendo en cada rama de las consultas un "OR" que compruebe si el parámetro está vacío:

    List<c_fichas> fic = (from w in conex.conn.Trabajadores
              where (w.cod_trab.Trim().CompareTo(cod_trab_d) >= 0 || cod_trab_d=="") &&
              (w.cod_trab.Trim().CompareTo(cod_trab_h) <= 0 || cod_trab_h=="") 
              select new c_fichas
              {
              cod_trab = w.cod_trab,
              nombre_completo = w.nombre_completo
              }).ToList();

    miércoles, 19 de marzo de 2014 7:20
  • Buenas tardes, amigo Alberto. Gracias por tu apoyo pero probé como me dices y no me genera nada la consulta (Cero registros).


    C. Zapata

    miércoles, 19 de marzo de 2014 20:49
  • ¿Puede ser que le estés pasando un parámetro que en lugar de ser un string vacío sea un null? La comparación cod_trab_d=="" devolvería false si cod_trab_d fuera null en lugar de ser "".
    • Marcado como respuesta CAZA - jueves, 20 de marzo de 2014 21:04
    jueves, 20 de marzo de 2014 6:41
  • Buenas tardes Alberto, tenias razón algo así me pasaba los parámetros no eran null exactamente pero si había algo que alteraba el parámetro que debería ser vació. 

    Gracias por tu apoyo, solucionado.


    C. Zapata

    jueves, 20 de marzo de 2014 21:04