2010-09-20 8 views
4

Je suis relativement nouveau à LINQ et je ne sais pas comment faire une condition similaire. J'ai une liste IEnumerable de myObject et je veux faire quelque chose comme myObject.Description comme 'Help%'. Comment puis-je accomplir cela? MerciLike condition in LINQ

+0

en double possible [Comme dans l'expression Lambda et LINQ] (http : //stackoverflow.com/questions/3616215/like-in-lambda-expression-and-linq) –

+0

@All .... merci pour les commentaires et réponses. Très utile et utile ...... – MikeTWebb

Répondre

5

Regardez ici:

http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/16/linq-to-sql-like-operator.aspx

Snippet:

StartsWith et Contains:

var query = from c in ctx.Customers 
      where c.City.StartsWith("L") && c.City.Contains("n") 
      select c; 

Et si vous devez l'utiliser avec LINQ to SQL (ne fonctionne pas avec LINQ to Objects):

sur mesure LIKE (System.Data.Linq.SqlClient.SqlMethods.Like):

var query = from c in ctx.Customers 
      where SqlMethods.Like(c.City, "L_n%") 
      select c; 
2

Vous pouvez utiliser StartsWith, EndsWith ou Contains selon l'endroit où vous voulez vérifier:

var result = from o in myCollection 
      where o.Description.StartsWith("Help") 
      select o; 

Vous pouvez en option passer un StringComparison pour indiquer si d'ignorer le cas ou non (pour StartsWith et EndsWith), qui fait fonctionner l'opération plus comme une requête SQL:

var result = 
    from o in myCollection 
    where o.Description 
     .StartsWith("Help", StringComparison.InvariantCultureIgnoreCase)) 
    select o; 

Si vous voulez faire un peu sensible de cas contient, vous devez utiliser IndexOf à la place:

var result = 
    from o in myCollection 
    where o.Description 
     .IndexOf("Help", StringComparison.InvariantCultureIgnoreCase) > 0 
    select o; 
+0

'StartsWith' et amis vous permettent également de spécifier le type de comparaison. –

+0

@Matti - Je mentionne cela juste après le premier exemple de code. –

+0

Oh ... euh, bon point! Continuer. –

4

Vous utilisez généralement exactement la même syntaxe que vous utiliseriez en dehors d'une requête.

myObject.Description.StartsWith("Help") 

Si cela fonctionne réellement dépend de l'endroit où vous utilisez LINQ (il peut être soit couru code, dans lequel tout cas fonctionne, ou se transforme en quelque chose comme autre, comme SQL, ce qui pourrait avoir des limites), cependant, ça vaut toujours la peine d'essayer.

1

vous pouvez utiliser string.StartsWith ou string.EndsWith ou string.Contains propriété de chaîne à utiliser comme comme opérateur.
startswith fonctionnera pour comme 'A%'
endsWith fonctionnera pour comme '% A'
Contient fonctionnera comme '% A%'