Работа Like немного похожа на In, но направление изменилось. Что это значит? Вы даёте строку и ищете поле в данных, содержащее эту строку. То есть данная строка является подмножеством поля. SQL scrip{filter}t пишется так.
Selec * из таблицы, где я бы вроде '%AD%' Selec * из таблицы, где я бы хотел '%AD' Selec * из таблицы, где я бы выбрал 'AD%'. Вышеуказанный % является джокером, указывающим, что поле содержит значение, а неизвестная позиция заменяется на %. Первая — указывать, что средняя часть — AD, и оба конца неясны. Вторая — AD в конце, а предыдущая — неясна. Третий, напротив, начинается с AD и заканчивается неясно. Соответствующее утверждение Linq выглядит так:
var q = (от c в db. Клиенты где c.CustomerID.Contains("ROUT") выберите c). ToList(); SQL, который он генерирует, —
ВЫБЕРИТЕ [t0]. [CustomerID], [t0]. [Название компании], [t0]. [Имя контакта], [t0]. [ContactT itle], [t0]. [Адрес], [t0]. [City], [t0]. [регион], [t0]. [Почтовый индекс], [t0]. [Совет Попробовать], [t0]. [Телефон], [t0]. [Факс] ОТ [dbo]. [Клиенты] AS [t0] ГДЕ [t0]. [CustomerID] КАК @p0 -- @p0: Входная строка (размер = 6; Prec = 0; Масштаб = 0) [%ОТСКОК%] В заключение ISSA, главный джокер:
var q = (от c в db. Клиенты где c.CustomerID.EndsWith("ISSA") выберите c). ToList(); SQL, который он генерирует, —
ВЫБЕРИТЕ [t0]. [CustomerID], [t0]. [Название компании], [t0]. [Имя контакта], [t0]. [ContactT itle], [t0]. [Адрес], [t0]. [City], [t0]. [регион], [t0]. [Почтовый индекс], [t0]. [Совет Попробовать], [t0]. [Телефон], [t0]. [Факс] ОТ [dbo]. [Клиенты] AS [t0] ГДЕ [t0]. [CustomerID] КАК @p0 -- @p0: входная строка (размер = 5; Prec = 0; Масштаб = 0) [%ISSA] Начиная с ARO, хвостовой джокер:
var q = (от c в db. Клиенты где c.CustomerID.StartsWith("ARO") выберите c). ToList(); SQL, который он генерирует, —
ВЫБЕРИТЕ [t0]. [CustomerID], [t0]. [Название компании], [t0]. [Имя контакта], [t0]. [ContactT itle], [t0]. [Адрес], [t0]. [City], [t0]. [регион], [t0]. [Почтовый индекс], [t0]. [Совет Попробовать], [t0]. [Телефон], [t0]. [Факс] ОТ [dbo]. [Клиенты] AS [t0] ГДЕ [t0]. [CustomerID] КАК @p0 -- @p0: входная строка (размер = 4; Prec = 0; Масштаб = 0) [ARO%]
Linq также предоставляет метод под названием SqlMethods.Like, который сначала требует добавления пространства имён System.Data.Linq.SqlClient. Вышеуказанные три можно записать
var q = (от c в db. Клиенты где SqlMethods.Like(c.CustomerID, "%ROUT%") выберите c). ToList(); Здесь тебе нужно самому заполнить джокер, чтобы сказать Линк, как вы совпали. Как что
var q = (от c в db. Клиенты где SqlMethods.Like(c.CustomerID, "%ISSA") выберите c). ToList(); Другой пример:
var q = (от c в db. Клиенты где SqlMethods.Like(c.CustomerID, "ARO%") выберите c). ToList(); Самое удивительное в SqlMethods.Like — это то, что вы можете реализовать wildcards где угодно с помощью собственных выражений wildcard. Как что
var q = (от c в db. Клиенты где SqlMethods.Like(c.CustomerID, "A%O%T") выберите c). ToList(); SQL, который он генерирует, —
ВЫБЕРИТЕ [t0]. [CustomerID], [t0]. [Название компании], [t0]. [Имя контакта], [t0]. [ContactT itle], [t0]. [Адрес], [t0]. [City], [t0]. [регион], [t0]. [Почтовый индекс], [t0]. [Совет Попробовать], [t0]. [Телефон], [t0]. [Факс] ОТ [dbo]. [Клиенты] AS [t0] ГДЕ [t0]. [CustomerID] КАК @p0 -- @p0: входная строка (размер = 5; Prec = 0; Масштаб = 0) [A%O%T]
Самое стандартное — знать, что оно начинается на A и заканчивается на T, знает значение O посередине и ничего остального не знает. Просто используй это. SQL Server определяет четыре джокера, все из которых доступны здесь. К ним относятся: Пример описания символа wildcard{filter}tion % Любая строка из нуля или более символов. ГДЕ заголовок вроде '%computer%' находит все названия книг со словом 'computer' где-либо в названии. _ (подчёрк) Любой один символ. ГДЕ au_fname, КАК _ean, содержит все четырёхбуквенные имена, заканчивающиеся на ean (Дин, Шон и так далее). [ ] Любой отдельный символ в указанном диапазоне ([a-f]) или множестве ([abcdef]). ГДЕ au_lname LIKE '[C-P]arsen' содержит фамилии авторов, заканчивающиеся на arsen и начинающиеся на любой символ между C и P, например, Carsen, Larsen, Karsen и так далее. [^] Любой отдельный символ, не входящий в указанный диапазон ([^a-f]) или множество ([^abcdef]). ГДЕ au_lname КАК 'de[^l]%', все фамилии автора, начинающиеся на de и где следующая буква не является l.
% представляет собой строку нулевой длины или любую другую длину. _ указывает на символ. [] обозначает символ в диапазоне. [^] обозначает символ, который не входит в определённый диапазон Как что:
var q = (от c в db. Клиенты где SqlMethods.Like(c.CustomerID, "A_O_T") выберите c). ToList(); Просто используйте _, чтобы представить персонажа. Генерируемый SQL выглядит так:
ВЫБЕРИТЕ [t0]. [CustomerID], [t0]. [Название компании], [t0]. [Имя контакта], [t0]. [ContactT itle], [t0]. [Адрес], [t0]. [City], [t0]. [регион], [t0]. [Почтовый индекс], [t0]. [Совет Попробовать], [t0]. [Телефон], [t0]. [Факс] ОТ [dbo]. [Клиенты] AS [t0] ГДЕ [t0]. [CustomerID] КАК @p0 -- @p0: входная строка (размер = 5; Prec = 0; Масштаб = 0) [A_O_T]
Для Not Like всё очень просто, просто добавьте чепуху.
var q = (от c в db. Клиенты Где! SqlMethods.Like(c.CustomerID, "A_O_T") выберите c). ToList();
SqlMethods.Like также имеет параметр escape character, который будет преобразован в оператор, подобный следующему.
ВЫБЕРИТЕ столбцы ИЗ таблицы, где столбец LIKE '%\%%' ESCAPE '\' Escape — это потому, что поле содержит специальные символы, такие как %,_ [ ], которые используются как джокеры. Вот тут и появляется Escape. Это связано с SQL Server.
|