none
buscar objetos con EF RRS feed

  • Pregunta

  • hola tengo este metodo

    public static List<Catalogos> BuscarCatalogo(int? aId, int? aTipoCategoria, string aDescripcion)
            {
                EnfermeriaEntities entity = new EnfermeriaEntities();
                var catalogos = entity.Catalogos;
                if (aId != null)
                    entity.Catalogos.Where(cat => cat.id == aId);
                if (aTipoCategoria != null)
                    entity.Catalogos.Where(cat => cat.tipoCategoria == aTipoCategoria);
                if (aDescripcion != "")
                    entity.Catalogos.Where(cat => cat.descripcion == aDescripcion);
                return catalogos.ToList();
            }

    lo que se intenta es filtrar una busqueda dependiendo los parametros recibidos, pues todo funciona bien, lo unico que no me gusta es que por ejemplo si los 3 parametros fueran null me regresaria la lista completa, cuando no deberia regresar nada, por que no encontro lo buscado.

    y otro problema si pasaran dos atributos tipocategoria y la descripcion por ejemplo y encontrara la descripcion pero no con el tipo que haria, es que no he probado por que aun no tengo una presentacion

    lunes, 28 de mayo de 2012 17:04

Respuestas

  • que error marca y e que linea

    sabes de la aprticupacion en el foro que decir "so no marca error" no ayuda para nada

    si vas a decir eso acompañalo con la descripcion del problema o el mensaje del error

    ----

    esta claro que si el metodo devuelve null deberas controlar esto cuando uses el metodo, o sino usar

    if (aId == null && aTipoCategoria == null && aDescripcion == ""){

       return new List<EnfermeriaEntities>();

    }


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP lunes, 28 de mayo de 2012 18:01
    • Marcado como respuesta niqel lunes, 28 de mayo de 2012 19:38
    lunes, 28 de mayo de 2012 18:00

Todas las respuestas

  • Te digo algo que he aprendido en un año que tengo desarrollando en c# y me lo enseño un maestro que aprecio mucho y por eso no se me olvida "Divide y Venceras".

    Bueno lo que te quiero decir con esto es por que tienes un solo metodo para ejecutar cuatro logicas diferentes en el mismo, osea, si te fijas le das la delegacion a un metodo de que busque por un id, un tipo o una descripcion, por que no crear tres metodos por separado que se encarguen de hacer cada consulta para que asi a la hora de mantener tu codigo te sea mas facil?. otra cosa y es el primer parametro es el Id de la tabla Catalogos? por que si es asi tu metodo esta mal por que te devolveria un un solo registro y segun la logica del metodo quieres una lista de catalogos que cumplan con uno de estas condiciones. tambien por que preguntas por null? es que en tu codigo pasas valores en null al metodo? se supone que tienes que resolver lo de la logica del negocio en otro sitio, y que el acceso a datos o repositorio se encargue de devolverte informacion no de validar si es null o no/

    Podrias hacer

    public static ListMCatalogos> BuscarCatalogosByTipoCategoria(int aTipoCategoria)

    {

         var context = new EnfermedadesEntities();

         return context.Catalogos.Where(t => t.id == aTipoCategoria).ToList();

    }

    entonces este metodo te devolveria la lista de los catalogos cuyo tipo de categoria sea igual al tipo que te estan pidiendo

    asi te evitaras el tener que controlar todo esto en un metodo y invocas segun lo que quieras buscar el metodo que deseas

    Saludos


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"

    lunes, 28 de mayo de 2012 17:24
  • pero entonces validalo

    if (aId == null && aTipoCategoria == null && aDescripcion == ""){

       return null;

    }

    o sea sino hay filtro alguno devuleves null, nada de resultado

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 28 de mayo de 2012 17:25
  • mmmm pues funcionaria, pero imaginate esto

    una tabla con 20 columnas tendria que crear un constructor de 20 parametros y despues uno de 19 y despues uno de 18 y despues uo de 17 nadamas hay son 21 constructores ahora si quieres combinar busquedas quiero todo los que sean esto y esto, pues entonces un constructor con dos parametros, pero si quiero combinar 3 pues un constructor con 3 parametros imaginate cuantos constructores serian

    20*20*20*20*20*20*20*20 etc muchas combinaciones por eso hago un constructor que acepta nullos y pregunto con if si es null o no, algo que si me llamo la atencion es que me dices que lo debe hacer la capa de negocio, creo que es sierto, como la consulta se genera a base de los parametros pues creo que esta bien asy.

    lunes, 28 de mayo de 2012 17:45
  • y eso no marca error leandro, cuando haga una lista y la iguale al metodo y sea null???
    lunes, 28 de mayo de 2012 17:53
  • que error marca y e que linea

    sabes de la aprticupacion en el foro que decir "so no marca error" no ayuda para nada

    si vas a decir eso acompañalo con la descripcion del problema o el mensaje del error

    ----

    esta claro que si el metodo devuelve null deberas controlar esto cuando uses el metodo, o sino usar

    if (aId == null && aTipoCategoria == null && aDescripcion == ""){

       return new List<EnfermeriaEntities>();

    }


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP lunes, 28 de mayo de 2012 18:01
    • Marcado como respuesta niqel lunes, 28 de mayo de 2012 19:38
    lunes, 28 de mayo de 2012 18:00
  • disculpa leandro, yo pregunto muchas cosas siempre, tu lo sabes, pero nunca pongo error nomas por error asi como pensaste, deberas disculpame, yo solo me referia a si regreso null como me pusiste, pero deberas no vuelve a suceder sorry, oie leandro una pregunta que no es del tema, yo admiro mucho a uds ati webjose apedro urtado asergiomf omar del valle etc. disculpen si no mencione a alguien mas pero deberas como logran saber tanto, yo intento hacer hacer leo la documentacion manuales, y luego les pregunto gracias adios me contestan pero no logro ni un tema dominarlo como uds, ya voy a cumplir un año desarrollando y los proyectos han salido. 

    ha avido ocasiones en las que intento contestar en el foro cosas que preguntan que yo ya pregunte, y como quiera no alcanzo me ganas tu jajajajajajaa. bueno hice este comentario solo para agregcerles a todos uds.

    lunes, 28 de mayo de 2012 19:37
  • pero deberas como logran saber tanto

    imagino que tiene que ver los años de expriencia o de darse la cabeza tantas veces que uno aprende a la fuerza

    igualmente hay muchas cosas que no conozco, o que quizas toco de oido, el tema creo que pasa por darse maña a veces me pasa que no tengo ni idea sobre un tema, pero busco un poco y quizas algunas pistas lo destraban, pero para llegar a ese punto se requiere tiempo y practica

    programar es como aprender un idioma o tocar un instrumento, solo la practica y los años lo hacen a uno mejor


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 28 de mayo de 2012 19:51