2010-10-12 18 views
28

¿Cómo puedo realizar una consulta LIKE dentro de Linq?¿Cómo hacer una consulta LIKE con linq?

Tengo la siguiente consulta que me gustaría ejecutar.

var results = from c in db.costumers 
       where c.FullName LIKE "%"+FirstName+"%,"+LastName 
       select c; 

Respuesta

29

Usted podría utilizar SqlMethods.Like(matchExpression,pattern)

var results = from c in db.costumers 
       where SqlMethods.Like(c.FullName, "%"+FirstName+"%,"+LastName) 
       select c; 

El uso de este método fuera de LINQ a SQL siempre lanzar una excepción NotSupportedException.

+0

No tuve tiempo de dar vueltas con esto: donde SqlMethods.Like (s.Email, id + "%") que a través de un error (sí, tengo el uso de System.Data.Linq.SqlClient ;, cambié a donde s.Email.Contains (id) aunque no sea el mismo, puedo hacerlo funcionar cambiando a EndsWith –

26

Pruebe usar string.Contains() combinado con EndsWith.

var results = from c in db.Customers 
       where c.FullName.Contains (FirstName) && c.FullName.EndsWith (LastName) 
       select c; 
+0

Prefiero esto sobre el SqlMethods –

+2

En contraste con una consulta 'me gusta', esto no distingue entre mayúsculas y minúsculas. –

+0

Esta consulta se traduce en una declaración LIKE de SQL si se usa Entity Framework, por lo que su sensibilidad a las mayúsculas y minúsculas depende de la intercalación de la columna/tabla/db. –

2
where c.FullName.Contains("string") 
1

Puede usar contiene:

string[] example = { "sample1", "sample2" }; 
var result = (from c in example where c.Contains("2") select c); 
// returns only sample2 
11

Trate como esto

var results = db.costumers.Where(X=>X.FullName.Contains(FirstName)&&(X=>X.FullName.EndsWith(LastName)) 
          .Select(X=>X); 
+3

¿Por qué no usar el operador '&&', en lugar de la cláusula doble Where? – Max

+0

@MaxMommersteeg: Thanks, Updated –

+0

@max Por qué no 2 cláusula where? Si cada cláusula 'where' está en su propia línea, hace que el código sea más legible si hay muchas condiciones largas. – Phil1970

3
String [] obj = (from c in db.Contacts 
          where c.FirstName.StartsWith(prefixText) 
          select c.FirstName).ToArray(); 
      return obj; 

StartsWith() y EndsWith() que puede ayudar mucho aquí. Si desea buscar datos entre el campo, se puede usar Contains().

0

var StudentList = dbContext.Students.SqlQuery("Select * from Students where Email like '%gmail%'").ToList<Student>();

El usuario puede utilizar este de consulta como en LINQ y rellenar el modelo de estudiante.

+0

Propenso a la inyección de SQL si la entrada proviene del usuario ... – Phil1970

Cuestiones relacionadas