2010-03-16 15 views
30

El archivo de ayuda que venía con Dynamic Linq en CSharpSamples.zip no muestra ningún ejemplo de uso de contains o me gusta.¿Cómo se usa "contiene" o "me gusta" en una consulta dinámica de linq?

¿Hay alguna solución simple para hacer esto? es decir, donde (col como @col) no funciona.

+0

Tenga en cuenta a todos los que estoy discutiendo el DYNAMIC LINQ que viene con Visual Studio en el archivo de ejemplos. En esta versión, puedo definir una consulta donde usando una cadena "mycol = @mycol". Sé de los casos simples. –

+0

Lo que * realmente * me gustaría hacer es insertar la cadena "Me gusta" en lugar de "=" en mi cadena y tener el Dynamic Linq para analizarlo. Pero, tomaré un trabajo alrededor. Creo que la razón por la que no fue agregado es que construyeron su analizador en System.Linq.Expressions que no tiene este método. –

+0

Para que quede claro, yo puedo hacer esto "usuario @ = 0, Contact.FirstName = @ 1" Pero no esta "usuario como @ 0, Contacto.FirstName como @ 1" Cuando éstas son cadenas, y utilizando la sintaxis de LINQ dinámica: dc.table.where (mystring, matriz) –

Respuesta

56

¡Aquí está la respuesta! El Dynamic Linq es compatible con. operador,

De acuerdo con los documentos:

"campo de instancia o instancia de propiedad acceso a cualquier campo público o de propiedad se puede acceder".

Por lo tanto, es posible utilizar esta sintaxis

.Where("MyColumn.Contains(@0)", myArray) 

Gracias por todas las sugerencias! Y gracias a mí por encontrar la solución.

+1

¿Cómo puede hacer eso en una columna anulable – Thea

+8

@Teddy .Where (? "MiColumna ! = null && MyColumn.Contains (@ 0) ", myArray) –

+0

¿Cómo se convierte un Grid' FilterExpression' a esta sintaxis? Hay algunas bibliotecas NuGet Dynamic LINQ, incluido el soporte para .NET 4.0 ... ¿sabemos si hay alguna? ha agregado soporte de conversión de LIKE a Contiene (u otro)? – PeterX

1

Tenga en cuenta que la solución provista solo funciona para casos simples: si desea usar parámetros para el origen de la llamada Contiene, y/o si desea utilizar la colección consultada actual para usar como parámetro para los Contiene llame, entonces la solución provista no funcionará.

puede encontrar en la siguiente entrada de blog una solución para extender correctamente la biblioteca dinámica LINQ y agregar soporte para la extensión Contiene:

http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-contains-extension-.html

4

Para mí la solución se outerIt.

class User { public string Name { get; set; } } 
    ... 
    IQueryable<User> query = db.Users; 
    ... 
    query = query.Where("@0.Contains(outerIt.Name)", list); 

Tenga en cuenta que outerIt es una especie de una palabra clave incorporado en la biblioteca (que no es necesario modificarlo como se puede leer en una respuesta aquí). Puede acceder a la propiedad del tipo de su consulta a través de él.

Cuestiones relacionadas