Робота 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.
|