¿Cómo se usa “contiene” o “me gusta” en una consulta dinámica de linq?

El archivo de ayuda que viene con Dynamic Linq en CSharpSamples.zip no muestra ningún ejemplo de uso de contains o like.

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

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

De acuerdo con los documentos:

“Campo de instancia o acceso a la propiedad de instancia. Se puede acceder a cualquier campo público o propiedad”.

Por lo tanto, es posible usar esta syntax

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

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

Para mí, la solución fue externa .

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

Tenga en cuenta que outerIt es una especie de palabra clave construida en la biblioteca (no necesita modificarla ya que puede leerla aquí en una respuesta). Puede acceder a la propiedad del tipo de su consulta a través de él.

En realidad, hay soporte directo para el operador similar en Linq2Sql:

 db.MyTable.Where(a => SqlMethods.Like(a.Name, "%"+searchTerm+"%")) 

Mira aquí:

http://msdn.microsoft.com/en-us/library/system.data.linq.sqlclient.sqlmethods_members.aspx

… pero prefiero usar startsWith, endsWith y contains para la mayoría de las aplicaciones.

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

Puede encontrar en la siguiente publicación de blog una solución para ampliar correctamente la biblioteca Dynamic 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