Comment puis-je faire quelque chose comme ça:
customers.where(c=>c.Name **like** "john");
Je sais que ce n'est pas possible mais je me demandais comment puis-je avoir quelque chose de similaire.
customers.Where(c => c.Name.Contains("john"));
Si vous ciblez LINQ to SQL, utilisez SqlMethods.Like :
customers.Where(c => SqlMethods.Like(c.Name, "%john%"));
Explication:
Le compilateur générera une arborescence d'expression à partir de l'instruction ci-dessus. Étant donné que LIKE
est une construction spécifique à SQL et non commune à tous les fournisseurs de requêtes LINQ, la classe SqlMethods
et ses membres sont utilisés comme "indice" pour le compilateur d'expressions (compile des arborescences d'expressions en SQL) pour émettre une instruction LIKE
.
La première pensée qui me vient à l'esprit est Regex.IsMatch
.
Cela se rapprocherait le plus du type de fonctionnalité que vous obtenez de LIKE
; par exemple, avec cela, vous pouvez faire ceci:
var matches = people.Where(p => Regex.IsMatch(p.Name, "A.*[mn]"));
foreach (Person match in matches)
{
Console.WriteLine(match.Name);
}
Et obtenez une sortie comme celle-ci:
Adam Aaron Aidan
Aller avec string.Contains
comme d'autres l'ont suggéré est presque certainement préférable si votre intention est simplement de rechercher une sous-chaîne spécifique dans Name
.
using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));
Utilisation Regex.IsMatch
dans votre instruction where ou pour une version plus simple sans caractères génériques, etc.:
customers.where(c=>c.Name.Contains("john"));
Voici mon code:
string s="somethings";
customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));
Quelque chose comme ça.