У меня есть текстовое поле, которое позволяет пользователю указывать строку поиска, включая подстановочные знаки, например:
Joh*
*Johnson
*mit*
*ack*on
Перед использованием LINQ к Объектам у меня была хранимая процедура, которая взяла ту строку в качестве параметра и сделала:
SELECT * FROM Table WHERE Name LIKE @searchTerm
И затем я просто сделал бы Строку. Замена ('* ', ' % ') прежде, чем передать его в.
Теперь с LINQ к Объектам я пытаюсь выполнить то же самое. Я знаю, что существует StartsWith, EndsWith и Содержат поддержку, но это не будет поддерживать его в способе, которым мне нужно.
Я читал о "SqlMethods. Как" и попробованный это:
var people = from t in entities.People
where SqlMethods.Like(t.Name, searchTerm)
select new { t.Name };
Однако я получаю следующее исключение:
LINQ to Entities does not recognize the method 'Boolean Like(System.String,
System.String)' method, and this method cannot be translated into a store
expression.
Как я получил бы эту ту же функциональность с помощью LINQ для Объектов?
var people = entities.People.Where("it.Name LIKE @searchTerm", new ObjectParameter("searchTerm", searchTerm));
Итак, ваш выбор:
Содержит
. Я знаю, что тебе это не нравится, но, вероятно, это можно было бы заставить работать. var people = from t in entities.People
where t.Name.ToLower().Contains(searchTerm.ToLower())
select new { t.Name };
РЕДАКТИРОВАТЬ. Я могу смешивать синтаксис. Обычно я использую методы расширения; но содержит будет работать.