Estoy escribiendo lo que creo que debería ser una aplicación de Windows Forward relativamente simple. Estoy usando LINQ to SQL, aunque nunca lo he usado antes. Tenemos una base de datos de SQL Server, y estoy creando un front-end para acceder a esa base de datos. Estoy tratando de encontrar la manera más eficiente de buscar múltiples parámetros (arbitrarios) de búsqueda con él.Múltiples parámetros de búsqueda con LINQ
En el formulario de Windows, creo un diccionario con cada clave de búsqueda y su valor para buscar, y lo paso a mi método de búsqueda(). Estoy tratando de encontrar una forma de buscar en la base de datos con cada una de esas claves y sus valores asociados. Esto es lo que estoy tratando de hacer:.
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
var query = dc.Products;
foreach (KeyValuePair<string, string> temp in searchParams)
{
query = query.Where(x => x.(temp.Key) == temp.Value);
}
return query;
}
Soy consciente de que sintácticamente x (temp.Key) es incorrecta, pero espero que ilustra lo que estoy tratando de hacer. Me preguntaba si hay otra manera de hacer lo que estoy tratando de hacer sin tener que hacer una declaración de cambio gigante (o si/else si es un árbol).
EDITAR
Por lo tanto, lo revisé un poco, pero todavía tengo problemas con él. Esto es lo que tengo actualmente:
public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
DBDataContext dc = new DBDataContext();
string sQuery = "";
foreach (KeyValuePair<string, string> temp in searchParams)
{
sQuery += temp.Key + "=" + temp.Value + " AND ";
}
var query = dc.Products.Where(sQuery);
return query;
}
De acuerdo con el artículo LINQ Dynamic Query Library, esto debería estar bien. Aquí está el error que obtengo:
Los argumentos de tipo para el método 'System.Linq.Queryable.Where (System.Linq.IQueryable, System.Linq.Expressions.Expression>)' no se pueden deducir del uso. Intente especificar los argumentos de tipo explícitamente.
¿Hay una razón por la que el parámetro Método de búsqueda tiene que ser un diccionario en lugar de un Func ??? –
No estoy del todo seguro de lo que quiere decir con eso ... ¿podría aclarar? – jnevelson
Cada tecla en el diccionario contiene los parámetros para buscar (y el valor de cada parámetro para buscar). – jnevelson