Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 20728|Ответ: 0

[Источник] Как fuzzy query в Linq к sql

[Скопировать ссылку]
Опубликовано 07.09.2015 23:16:28 | | |
Работа 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.





Предыдущий:Оптимизация производительности сайта: подробное объяснение настроек управления кэшом
Следующий:Жуйцзе всегда была решительна в том, что происходит
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com