2010-09-20 12 views
6

Estoy tratando de recuperar una lista de cadena en la que se contiene "Britney Spears", y esto es lo que usoLINQ2SQL como el comando de la frase

from p in Objects 
where p.Title.Contains("Britney Spears") 
select p 

que funciona bien, pero si quiero seleccionar título que es "Britney Jean Spears", "Britney 'Sexy' Spears" no funciona, así que mi pregunta es ¿cómo puedo insertar un comodín '%' entre Britney Spears mientras realizo una búsqueda LINQ2SQL? Gracias.

Saludos, Andy.

Respuesta

13

Puede utilizar el método SqlMethods.Like para este fin.

from p in Objects 
where SqlMethods.Like(p.Title, "Britney% Spears") 
select p 
+0

Oh, esa es una alternativa mucho más agradable. –

+0

Gracias montones, esto es muy útil. – cherhan

-1

hacer exactamente como lo haría con hacia arriba SQL

puede suministrar caracteres especiales con la cláusula like tales como "", '%' y '[]'

si eso no es lo suficientemente bueno , entonces puedes usar regex, pero ten cuidado ya que regex se ejecutará en el lado "cliente", es decir, buscará todo y luego tratará de reducir los resultados en la memoria. Puede optimizar tanto el método zerkms' haciendo

from p in Objects 
where p.Title.Contains("Britney") && p.Title.Contains("Spears") && regex.Match(p.Title).Success 
select p 

Yo no lo he probado, pero debe ejecutar dos primeras condiciones en el lado del servidor SQL, y luego reducir el uso de expresiones regulares.

+4

Esto no funciona con Linq2Sql; deberás llamar a 'AsEnumerable' antes de aplicar la expresión regular. – Ani

0

Simplemente use StartsWith() y EndsWith() para simular el patrón. AFAIK, LINQ-to-SQL no admite comodines.

from p in Objects 
where p.Title.StartsWith("Britney") && c.Title.EndsWith("Spears") 
select p; 

De lo contrario, podría ejecutar una consulta directamente si tiene un patrón más complejo.

db.ExecuteQuery<MyObject>("SELECT * " 
         + "FROM Objects " 
         + "WHERE Title LIKE 'Britney%Spears'"); 
Cuestiones relacionadas