Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 20728|Відповідь: 0

[Джерело] Наприклад, нечіткий запит у Linq до SQL

[Копіювати посилання]
Опубліковано 07.09.2015 23:16:28 | | |
Робота Like трохи схожа на In, але напрямок змінився. Що це означає? Ви даєте рядок і шукаєте поле в даних, яке містить цей рядок. Тобто заданий рядок є підмножиною поля. SQL scrip{filter}t записується так.


Selec * зі таблиці, де я б хотів '%AD%'
Selec * зі таблиці, де я б хотів '%AD'
Selec * зі таблиці, де я б ставив 'AD%'
Наведений вище % є джокером, що означає, що поле містить значення, а невідома позиція замінюється на %. Перша — це вказівка, що середня частина — AD, а два кінці — нечіткі. Друга — AD наприкінці, а попередня — незрозуміла. Третя, навпаки, починається з AD і закінчується нечітко. Відповідне твердження Лінка виглядає:


var q = (з c у db. Клієнти
де c.CustomerID.Contains("ROUT")
виберіть C). ToList();
SQL, який він генерує, є


ВИБЕРІТЬ [t0]. [CustomerID], [t0]. [Назва компанії], [t0]. [Ім'я контакту], [t0]. [ContactT
itle], [t0]. [Адреса], [t0]. [Місто], [t0]. [регіон], [t0]. [Поштовий індекс], [t0]. [Коун
спробуй], [t0]. [Телефон], [t0]. [Факс]
ВІД [dbo]. [Клієнти] AS [t0]
ДЕ [t0]. [CustomerID] ЯК @p0
-- @p0: Вхідний рядок (розмір = 6; Prec = 0; Масштаб = 0) [%ROUT%]
Закінчуючи ISSA, головний джокер:


var q = (з c у db. Клієнти
де c.CustomerID.EndsWith("ISSA")
виберіть C). ToList();
SQL, який він генерує, є


ВИБЕРІТЬ [t0]. [CustomerID], [t0]. [Назва компанії], [t0]. [Ім'я контакту], [t0]. [ContactT
itle], [t0]. [Адреса], [t0]. [Місто], [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]. [Місто], [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 — це те, що ви можете реалізувати дикі карти будь-де з власними визначеними виразами wildcard. Наприклад, що саме


var q = (з c у db. Клієнти
де SqlMethods.Like(c.CustomerID, "A%O%T")
виберіть C). ToList();
SQL, який він генерує, є


ВИБЕРІТЬ [t0]. [CustomerID], [t0]. [Назва компанії], [t0]. [Ім'я контакту], [t0]. [ContactT
itle], [t0]. [Адреса], [t0]. [Місто], [t0]. [регіон], [t0]. [Поштовий індекс], [t0]. [Коун
спробуй], [t0]. [Телефон], [t0]. [Факс]
ВІД [dbo]. [Клієнти] AS [t0]
ДЕ [t0]. [CustomerID] ЯК @p0
-- @p0: Вхідний рядок (розмір = 5; Prec = 0; Масштаб = 0) [A%O%T]

Найстандартніше — знати, що він починається на A і закінчується на T, знає значення O посередині і нічого іншого не знає. Просто використай це.
SQL Server визначає чотири дикі карти, усі з яких доступні тут. Вони такі:
Приклад опису дикого символу{filter}tion
% Будь-який рядок із нуля або більше символів. ДЕ заголовок, подібний до '%computer%', показує всі назви книг зі словом 'computer' у назві книги.
_ (підкреслення) Будь-який окремий символ. ДЕ au_fname, ЯК _ean, містить усі чотирилітерні імена, що закінчуються на ean (Dean, Sean тощо).
[ ] Будь-який окремий символ у заданому діапазоні ([a-f]) або множині ([abcdef]). ДЕ au_lname ЯК '[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]. [Місто], [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, який буде перетворений у оператор, подібний до наступного.


ВИБРАТИ стовпці З таблиці ДЕ
стовпець ЯК '%\%%' ESCAPE '\'
escape означає, що поле містить спеціальні символи, такі як %,_ [ ], які використовуються як джокери. Ось тут і з'являється Escape. Це проблема SQL Server.





Попередній:Оптимізація продуктивності вебсайту: детальне пояснення налаштувань керування кешом
Наступний:Жуйцзе завжди була впевнена в тому, що відбувається
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com