Использование содержит с шаблоном в Entity Framework Core [dубликат]

Я сильно соблазн закрыть это как дубликат; на этот вопрос ответит по-разному по всему сайту:

будет ли скрипт в теге скрипта html с расширением php кэшироваться? Когда браузер автоматически очищает кеш внешнего файла JavaScript? Помощь с агрессивным кешированием JavaScript Как контролировать кеширование веб-страниц во всех браузерах? Как заставить браузер видеть изменения CSS и Javascript?
32
задан PlayKid 24 June 2009 в 20:18
поделиться

12 ответов

Я бы использовал регулярные выражения, так как вы не всегда можете использовать Linq для SQL.

Как этот пример Linq to Objects

  List & lt; string & gt;  list = new List & lt; string & gt; ();  list.Add ("Это предложение.");  list.Add («Это еще один»);  list.Add («C # - забава»);  list.Add («Linq также забава»);  System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex ("This");  var qry = list .Where & lt; string & gt; (item = & gt; regEx.IsMatch (item)) .ToList & lt; string & gt; ();  // Печать результатов foreach (элемент var в qry) {Console.WriteLine (item);  }  
31
ответ дан David Basarab 15 August 2018 в 16:10
поделиться
  • 1
    Бит долго наматывался - он мог просто использовать SqlMethods.Like – user 24 June 2009 в 20:29
  • 2
    Вы всегда считаете, что вызываете базу данных SQL. Что делать, если вы запрашиваете список, который был создан в памяти? – David Basarab 24 June 2009 в 20:33
  • 3
    Его вопрос помечен SQL – user 25 June 2009 в 17:40
  • 4
    Предоставление общего решения для конкретной проблемы НЕ ПЛОХО. – Dementic 26 March 2012 в 13:56

не уверен, что вы говорите LinqToSql или просто linq ... но вы можете использовать регулярные выражения:

 . Где (dto = & gt; System.Text.RegularExpressions.Regex.IsMatch (  dto.CustomerName, @ "Ad"));   
1
ответ дан bytebender 15 August 2018 в 16:10
поделиться

Для Entity Framework Core 2.0 существует оператор LIKE (, объявленный в августе 2017 года ):

   var query = from e in _context.Employees, где EF.Functions.Like (e.Title, "% developer%") выбирает e;   
3
ответ дан Dmitry Pavlov 15 August 2018 в 16:10
поделиться

Вы говорите LINQ к объектам или LINQ to SQL?

Для LINQ для объектов вам придётся прибегать к регулярным выражениям , которые я думаю.

0
ответ дан fretje 15 August 2018 в 16:10
поделиться
  var result = (from x in db.Members где x.IDNumber.Contains (idnumber) & amp; x.InstitutionIdentifier == instit.Identifier select x) .ToList ();  результат возврата;   

Будет работать как для Linq to SQL, так и для Linq в памяти.

3
ответ дан Gerhard 15 August 2018 в 16:10
поделиться

добавьте System.Data.Linq.SqlClient в ваш список использования или импорта, затем попробуйте:

  var results = from x в данных, где SqlMethods.Like (x.SearchField, "% something%  например% this% ") выберите x;   
14
ответ дан Joe Davis 15 August 2018 в 16:10
поделиться

В .Net-коде, включая LINQ to Objects, я использую реализацию функции IsSqlLikeMatch из потока . Использование Regex для создания подобной функции SQL. .

Пример использования

  bool ret = message.IsSqlLikeMatch (pattern);   

Подробнее в моем посте «похожие» шаблоны SQL для сравнения в .Net

1
ответ дан Michael Freidgeim 15 August 2018 в 16:10
поделиться

Я знаю, что это и старая тема, но вот мое очень простое решение:

  string s = Regex.Escape («pattern - escaped for sanity»). Заменить («%»)  , ". *"). Заменить ("_", ".?");  user = & gt;  Regex.IsMatch (user.FullName, s, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);   

В этом коде я использую общие escape-символы для языка SQL. Если вы хотите использовать say * и ? , escaped string будет содержать \ * и \? соответственно, make обязательно включите символ обратного слэша в операторе .Replace (...) . Конечно, если вы хотите дать своему пользователю возможность искать RexEx, просто не избегайте строки шаблона.

Поиск в учебнике Regex для других опций.

Я считаю, что обычно % будет соответствовать хотя бы одному символу , а RegEx . * будет соответствовать ноль или более символов . Таким образом, в действительности подстановочный символ % больше похож на . + (жадный), а не . * (ленивый).

Надеюсь, это поможет.

2
ответ дан nurchi 15 August 2018 в 16:10
поделиться
 . Где (столбец LIKE «Pattern»)  
2
ответ дан Rony 15 August 2018 в 16:10
поделиться
3
ответ дан Ruard van Elburg 15 August 2018 в 16:10
поделиться

Вы можете использовать SqlMethods.Like () .

Пример использования:

  var results = from u у пользователей, где  SqlMethods.Like (u.FirstName, "% John%") выберите u;   
74
ответ дан Ryan Versaw 15 August 2018 в 16:10
поделиться
  • 1
    очень круто! не знал, что существует ... – bytebender 24 June 2009 в 20:27
  • 2
    Это будет работать только с запросами LinqToSql (как должно быть видно из используемого класса). – Ryan Versaw 24 June 2009 в 20:29
  • 3
    Очень приятно, я не знал, что существует либо +1 – Doctor Jones 24 June 2009 в 20:30
  • 4
    Ничего себе, я никогда не знал, что существует класс SqlMethods. – BFree 24 June 2009 в 20:40

Вы также можете использовать «содержит»

  var myresult = db.MyItems.Where (x = & gt; x.MyField.Contains (mysearchstring));   
2
ответ дан spadelives 15 August 2018 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: