2011-03-26 22 views
5

Por lo tanto, deseo implementar una página que busque registros en la base de datos. El URL de la acción debe ser algo así como "~/Mail/List/{PropertyName}/{PropertyValue}.Página de búsqueda con MVC + Linq + EF

El nombre y el valor de la propiedad son los nombres de propiedad de la entidad correspondiente a filtrar y el valor corresponde al valor de la propiedad . lo que pasa es que la entidad contiene propiedades de muchos tipos. Int, cadena, fecha, etc ..

la pregunta es, ¿Cómo se implementa una página de búsqueda dinámica o algo por el estilo para filtrar mis consultas?

¡Gracias!

Respuesta

3

Todos los operadores de LINQ esperan que se pasen las lambdas. Entonces, cuando quiera filtrar como Where(x => x.[PropertyName] == [PropertyValue]), debe ser capaz de construir la expresión lambda correspondiente. Normalmente, cuando se conocen los valores en tiempo de compilación, no hay problema, solo se construirá el lambda.

Cuando no conoce los valores en tiempo de compilación, tiene que construir expression tree (que es esencialmente de lo que está hecha la expresión lambda) manualmente. Esto puede ser un poco complicado, pero hay bibliotecas para ayudarlo, como Dynamic LINQ (here es otro buen tutorial con EF). A continuación, puede especificar su Donde condición como una cadena y la biblioteca en tiempo de ejecución lo traducirá al árbol de expresiones o emitirá una excepción si es incorrecto.

Así, en su ejemplo, usando LINQ dinámica, puede hacer su consulta como db.Mails.Where(PropertyName + " == @0", PropertyValue);

+0

Oh. Mi. ¡DIOS! Amigo, gracias! Esta es la respuesta perfecta. En realidad, he estado luchando con este tema durante mucho tiempo, y finalmente alguien me dio una respuesta directa al grano. –

Cuestiones relacionadas