2010-10-12 9 views
28

Comment puis-je effectuer une requête LIKE dans Linq?Comment faire une requête LIKE avec linq?

J'ai la requête suivante que je voudrais exécuter.

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

Répondre

29

Vous pouvez utiliser SqlMethods.Like(matchExpression,pattern)

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

L'utilisation de cette méthode en dehors de LINQ to SQL toujours lancer une exception NotSupportedException.

+0

Je n'ai pas eu le temps de singe autour avec ceci: où SqlMethods.Like (à. E-mail, id + "%") cela par une erreur (oui j'ai l'using System.Data.Linq.SqlClient;, j'ai changé pour où s.Email.Contains (id) même si ce n'est pas la même chose, je peux le faire fonctionner en changeant à EndsWith –

26

Essayez d'utiliser string.Contains() associé à EndsWith.

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

Je préfère cela au SqlMethods –

+2

Contrairement à une requête 'like', ce n'est pas insensible à la casse. –

+0

Cette requête est traduite en une instruction SQL LIKE si vous utilisez Entity Framework, donc sa sensibilité à la casse dépend du classement de la colonne/table/db. –

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

Vous pouvez utiliser contient:

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

Essayez comme ça

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

Pourquoi ne pas utiliser l'opérateur '&&', au lieu de la clause double Where? – Max

+0

@MaxMommersteeg: Merci, Mise à jour –

+0

@max Pourquoi pas la clause 2 where Si chaque clause where est sur sa propre ligne, cela rend le code plus lisible s'il y a beaucoup de longues conditions – Phil1970

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

StartsWith() et EndsWith() peut vous aider beaucoup ici. Si vous voulez trouver des données entre les champs, alors Contains() peut être utilisé.

0

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

L'utilisateur peut utiliser de requête comme dans Linq et remplir le modèle d'étudiant.

+0

Sujet à l'injection SQL si l'entrée provient de l'utilisateur ... – Phil1970