2009-08-18 17 views
7

Tengo un escenario en el que tengo nombres de columna configurados personalizados, operadores asociados como <> = entre etc. y luego un valor asociado.Cómo construir LINQ dinámicamente

Estoy tratando de determinar si es posible crear una consulta LINQ con una cláusula dynamic (string) where?

He notado el material Predicate.OR Preditcate.AND, pero eso no es exactamente de lo que estoy hablando.

¿Alguna sugerencia?

+1

Duplicar posibles de este http://stackoverflow.com/questions/736952/the-best-way-to-build-dynamic-linq- Pregunta de consulta –

+0

"Sin embargo, el linq dinámico solo funciona en IQueryable y no en IEnumerable" - vea la nota sobre AsQueryable en mi respuesta ... –

Respuesta

9

Si usted está hablando de una cadenaWhere cláusula (en lugar de construir la expresión etc usted mismo) - entonces el Dynamic LINQ Library (en los 3,5 muestras, IIRC) debe satisfacer.

Tenga en cuenta que el ejemplo siguiente es para el uso de la base de datos; pero puede usarlo con LINQ-to-Objects llamando al .AsQueryable() en sus datos en memoria.

alt text http://www.scottgu.com/blogposts/dynquery/step2.png

+0

Aunque Alex fue el primero en la biblioteca Dynamic LINQ, la parte que faltaba fue planteada por Marc (lo siento por perder eso). Necesita el método de extensión .AsQueryAble() para poder trabajar con sus colecciones. – Jabezz

8

En realidad, hay una biblioteca específica de Microsoft (System.Linq.Dynamic) que viene con las muestras C# VS2008 que son compatibles con esto. Obténgalo desde here (Microsoft Download)

La biblioteca está incluida en el directorio \ LinqSamples \ DynamicQuery de las muestras de la descarga anterior.

Para consultar ejemplos amplia verificación de esta página: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

+0

Ok, System.Linq.Dynamic parece exactamente lo que estoy buscando a primera vista. Sin embargo, Dynamic linq solo funciona en IQueryable y no en IEnumerable. Así que esto todavía deja un poco de problema. – Jabezz

Cuestiones relacionadas