2010-03-29 3 views
8

Я новичок в LINQ, поиск в сети для образцов LINQ, имитирующих инструкцию SQL LIKE, не удовлетворяет меня.LINQ версия инструкции SQL LIKE

То, что я хочу, производит тот же результат запроса, как это SQL

SELECT * FROM table_1 WHERE column_1 LIKE '__0%' 

Я хочу запросить от table_1, где третий символ column_1 является «0»

Есть ли эквивалент заявление в LINQ

: D спасибо

+0

Не забудьте указать свой любимый ответ. – Steven

ответ

9

вы можете использовать SqlMethods класс. Это часть System.Data.Linq (a.k.a. LINQ to SQL).

from item in db.Table1 
where SqlMethods.Like(item.Column1, "__0%") 
select item; 
+1

Если это не obvoius по комментариям Стивена, это не работает с LINQ to Entity. Вам нужно будет использовать подход Андрея. – northpole

+1

Хотя 'SqlMethods.Like' допускает прямой перевод в оператор SQL LIKE, предпочитайте использовать методы' string' (например, StartsWith и Contains) там, где это возможно, потому что это приводит к тому, что код более удобен для обслуживания. – Steven

0

Попробуйте это (я не могу проверить это сейчас):

from t in table_1 
where t.column_1[2] == '0' 
select t; 
+0

@Marcelo: Вероятно, потому что код не работает, поскольку подчеркивание имеет особое значение при использовании с 'like', но не при использовании с' StartsWith'. – Guffa

+0

Не проверяет ли запись, начинающуюся с «__0», а если третий символ «0»? – Jens

+0

'_' означает любой символ в выражении' LIKE', в то время как он не имеет особого значения для 'StartsWith'. –

8

Нравится ли вам изготовление следующих моделей: StartsWith, EndsWith и Contains. Попытайтесь поиграть с ними.

+0

Ему нужен только третий символ, равный нулю, поэтому я думаю, что он тоже должен смотреть на «Подстроку». –

0

В вашем точном случае (при условии, column_1 это строка):

from t in table_1 
where !String.IsNullOrEmpty(t.column_1) && t.column_1.Length >= 3 && t.column_1[2] == '0' 
select t; 

Конечно, у вас есть все библиотеки .NET на ваши выбытия и можешь использовать некоторый сложный шаблон, соответствующий API (например, регулярные выражения), если вам нужно более общее решение:

var regex = new Regex("..0.*"); 
var qry = from t in table_1 
      where regex.Match(t.column_1).Success 
      select t; 
+0

Регулярное выражение не будет работать для L2SQL, которое, как я полагаю, использует OP (хотя оно не на 100% ясное) –

+0

Ох, не знал этого. Но правильные методы сопоставления строк работают, правильно? –

Смежные вопросы