Foros del Web » Programación para mayores de 30 ;) » .NET »

Cómo establecer la consulta condicionalmente

Estas en el tema de Cómo establecer la consulta condicionalmente en el foro de .NET en Foros del Web. Bueno, el título no dice mucho pero lo explico. En muchas ocasiones, la consulta que se quiere hacer no se sabe de antemano, ya que ...
  #1 (permalink)  
Antiguo 25/01/2011, 04:43
 
Fecha de Ingreso: octubre-2006
Mensajes: 53
Antigüedad: 17 años, 6 meses
Puntos: 0
Cómo establecer la consulta condicionalmente

Bueno, el título no dice mucho pero lo explico.

En muchas ocasiones, la consulta que se quiere hacer no se sabe de antemano, ya que depende de lo que el usuario haya seleccionado en los controles del formulario.

Por ejemplo tengo un caso simple. Se tienen dos campos para una tabla personas. El primer campo es el DNI con el que se identifica de forma única a la persona. El segundo campo es el Nombre.

Se quiere que si se introduce el DNI se busque a la persona, independientemente de lo que se ha puesto en el campo del nombre. En caso de que no se haya puesto el DNI, que busque todas las personas cuyo nombre sea el que se ha puesto en el campo del nombre.

En ADO, dado que la sentencia SQL se pasa como un string, yo podría hacer lo siguiente:

string miSQL = "select * from personas where";

if(txtDNI.Text != "")
{
miSQL = miSQL + " DNI = txtDNI.Text"
}

else
{
miSQL = miSQL + "nombre = txtNombre.Text"
}

Ya tengo el string con la sentencia SQL.

Además, esta forma permite concatenar más condicines en el where de forma sencilla. Por ejemplo, si hay un campo fecha de naciemiento, fácilmente se puede comprobar si el TextBox tiene datos o no, y concatenar " and fechaNacimiento>XXXX". Quedaría del modo siguiente:

if(txtDNI.Text != "")
{
miSQL = miSQL + " DNI = txtDNI.Text";
}

else
{
miSQL = miSQL + "nombre = txtNombre.Text";

if(txtFechaNacimiento != "")
{
miSQL = miSQL + " and FechaNacimiento = txtFechaNacimiento";
}

.... el resto de if()
}


Es decir, no hace falta que contemple todas las posibles combinaciones de condiciones que se pueden utilizar.

Sin embargo, la forma de construir la consulta en LinQ es la siguiente:

var misPersonas = (from p in miDB.Personas
where DNI = txtDNI.Text
select p)

Como se ve, aquí no existe la posiblidad de hacerlo com antes indiqué, solo veo que se tiene que poner a mano los campos que intervienen en el where, lo que obliga a contemplar todas las posibles combinaciones de campos que pueden intervenir en el where, lo cual es algo inviable a pocos campos que se puedan utilizar.

¿Realmente esto es así o hay alguna forma de hacerlo? ¿Cómo haría en LinQ lo que hice con ADO?.



Muchas gracias.
Daimroc.
  #2 (permalink)  
Antiguo 13/02/2011, 11:04
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Respuesta: Cómo establecer la consulta condicionalmente

de tu contexto de datos

puedes usar la clausula where y usando reflection generar el predicado dinamicamente con sus variantes base de si son condiciones incluyentes o excluyentes.

revisa esto

http://weblogs.asp.net/scottgu/archi...y-library.aspx




miBD.Personas.Where(PredicadoGeneradoDinamicamente )
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Etiquetas: establecer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.