Подтвердить что ты не робот

Как в выражении Lambda и LINQ

Как я могу сделать что-то вроде этого:

customers.where(c=>c.Name **like** "john");

Я знаю, что это невозможно, но мне было интересно, как у меня может быть что-то подобное.

4b9b3361

Ответ 1

customers.Where(c => c.Name.Contains("john"));

Ответ 2

Если вы ориентируетесь на LINQ to SQL, используйте SqlMethods.Like:

customers.Where(c => SqlMethods.Like(c.Name, "%john%")); 

Пояснение:

Компилятор сгенерирует дерево выражений из приведенного выше утверждения. Поскольку LIKE является специфичной для SQL конструкцией и не является общей для всех поставщиков запросов LINQ, класс SqlMethods и его члены используются как "подсказка" для компилятора выражения (компилирует деревья выражений для SQL), чтобы испускать LIKE утверждение.

Ответ 3

Первая мысль, которая приходит на ум, - 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.

Ответ 4

using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));

Ответ 5

Используйте Regex.IsMatch в инструкции where или для более простой версии без подстановочных знаков и т.д.:

customers.where(c=>c.Name.Contains("john"));

Ответ 6

Вот мой код:

string s="somethings";

customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));

Что-то подобное.