Как я могу сделать что-то вроде этого:
customers.where(c=>c.Name **like** "john");
Я знаю, что это невозможно, но мне было интересно, как у меня может быть что-то подобное.
Как я могу сделать что-то вроде этого:
customers.where(c=>c.Name **like** "john");
Я знаю, что это невозможно, но мне было интересно, как у меня может быть что-то подобное.
customers.Where(c => c.Name.Contains("john"));
Если вы ориентируетесь на LINQ to SQL, используйте SqlMethods.Like:
customers.Where(c => SqlMethods.Like(c.Name, "%john%"));
Пояснение:
Компилятор сгенерирует дерево выражений из приведенного выше утверждения. Поскольку LIKE
является специфичной для SQL конструкцией и не является общей для всех поставщиков запросов LINQ, класс SqlMethods
и его члены используются как "подсказка" для компилятора выражения (компилирует деревья выражений для SQL), чтобы испускать LIKE
утверждение.
Первая мысль, которая приходит на ум, - Regex.IsMatch
.
Это будет ближе всего к обеспечению функциональности, которую вы получаете от LIKE
; например, с ним вы могли бы сделать это:
var matches = people.Where(p => Regex.IsMatch(p.Name, "A.*[mn]"));
foreach (Person match in matches)
{
Console.WriteLine(match.Name);
}
И получим такой вывод:
Adam Aaron Aidan
Переход с string.Contains
, как предлагали другие, почти наверняка предпочтительнее, если вы намерены просто искать определенную подстроку внутри Name
.
using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));
Используйте Regex.IsMatch
в инструкции where или для более простой версии без подстановочных знаков и т.д.:
customers.where(c=>c.Name.Contains("john"));
Вот мой код:
string s="somethings";
customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));
Что-то подобное.