Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20728|Yanıt: 0

[Kaynak] Linq'den SQL'e bulanık sorgu gibi

[Bağlantıyı kopyala]
Yayınlandı 7.09.2015 23:16:28 | | |
Like'ın işleyişi biraz 'in' gibi, ama yön değişti. Ne anlama geliyor? Bir dizi verirsiniz ve veride bu diziyi içeren bir alan ararsınız. Yani, verilen bir dizi bir alanın alt kümesidir. SQL scrip{filter}t böyle yazılır.


Selec * tablodan '%AD%' gibi id'
Selec * tablodan, '%AD' gibi id'
Selec * 'AD%' gibi olan tablodan
Yukarıdaki %, alanda bir değer içerdiğini ve bilinmeyen konumun %'ye yer aldığını gösteren joker karttır; Birincisi, orta bölümün AD olduğunu ve iki ucunun net olmadığını belirtmektir. İkincisi ise sonunda AD, önceki ise net değil. Üçüncüsü ise tam tersine, AD ile başlar ve belirsiz bir şekilde sona erer. Karşılık gelen Linq ifadesi şudur:


var q = (db'deki c'den. Müşteriler
burada c.CustomerID.Contains("ROUT")
C seçin). ToList();
Ürettiği SQL ise


[t0]'ı SEÇ. [CustomerID], [t0]. [Şirket Adı], [t0]. [İletişimName], [t0]. [ContactT
itle], [t0]. [Adres], [t0]. [Şehir], [t0]. [Bölge], [t0]. [Posta Kodu], [t0]. [Meclis
try], [t0]. [Telefon], [t0]. [Faks]
[dbo]'dan. [Müşteriler] AS [t0]
BURADA [t0]. [CustomerID] MESELA @p0
-- @p0: Giriş dizisi (boyut = 6; Prec = 0; Ölçek = 0) [%ROUT%]
ISSA ile bitiyor, baş wildcard:


var q = (db'deki c'den. Müşteriler
burada c.CustomerID.EndsWith("ISSA")
C seçin). ToList();
Ürettiği SQL ise


[t0]'ı SEÇ. [CustomerID], [t0]. [Şirket Adı], [t0]. [İletişimName], [t0]. [ContactT
itle], [t0]. [Adres], [t0]. [Şehir], [t0]. [Bölge], [t0]. [Posta Kodu], [t0]. [Meclis
try], [t0]. [Telefon], [t0]. [Faks]
[dbo]'dan. [Müşteriler] AS [t0]
BURADA [t0]. [CustomerID] MESELA @p0
-- @p0: Giriş dizisi (boyut = 5; Prec = 0; Ölçek = 0) [%ISSA]
ARO ile başlayarak, kuyruk joker kartı:


var q = (db'deki c'den. Müşteriler
burada c.CustomerID.StartsWith("ARO")
C seçin). ToList();
Ürettiği SQL ise


[t0]'ı SEÇ. [CustomerID], [t0]. [Şirket Adı], [t0]. [İletişimName], [t0]. [ContactT
itle], [t0]. [Adres], [t0]. [Şehir], [t0]. [Bölge], [t0]. [Posta Kodu], [t0]. [Meclis
try], [t0]. [Telefon], [t0]. [Faks]
[dbo]'dan. [Müşteriler] AS [t0]
BURADA [t0]. [CustomerID] MESELA @p0
-- @p0: Giriş dizisi (Boyut = 4; Prec = 0; Ölçek = 0) [ARO%]

Linq ayrıca System.Data.Linq.SqlClient isim alanının önce eklenmesini gerektiren SqlMethods.Like adlı bir yöntem sunar. Yukarıdaki üçü yazılabilir


var q = (db'deki c'den. Müşteriler
burada SqlMethods.Like(c.CustomerID, "%ROUT%")
C seçin). ToList();
Burada, Linq'a nasıl eşleştiğinizi söylemek için joker kartı kendiniz doldurmanız gerekiyor. Ne gibi?


var q = (db'deki c'den. Müşteriler
burada SqlMethods.Like(c.CustomerID, "%ISSA")
C seçin). ToList();
Başka bir örnek:


var q = (db'deki c'den. Müşteriler
burada SqlMethods.Like(c.CustomerID, "ARO%")
C seçin). ToList();
SqlMethods.Like'ın en şaşırtıcı yanı, kendi tanımlanmış joker ifadelerinizle her yerde joker kart uygulayabilmenizdir. Ne gibi?


var q = (db'deki c'den. Müşteriler
burada SqlMethods.Like(c.CustomerID, "A%O%T")
C seçin). ToList();
Ürettiği SQL ise


[t0]'ı SEÇ. [CustomerID], [t0]. [Şirket Adı], [t0]. [İletişimName], [t0]. [ContactT
itle], [t0]. [Adres], [t0]. [Şehir], [t0]. [Bölge], [t0]. [Posta Kodu], [t0]. [Meclis
try], [t0]. [Telefon], [t0]. [Faks]
[dbo]'dan. [Müşteriler] AS [t0]
BURADA [t0]. [CustomerID] MESELA @p0
-- @p0: Giriş dizisi (boyut = 5; Prec = 0; Ölçek = 0) [A%O%T]

En standart şey, A ile başlayıp T ile bittiğini, ortada O değerini bildiğini ve başka bir şey bilmediğini bilmektir. Sadece bunu kullan.
SQL Server dört joker tanımlar, bunların hepsi burada mevcuttur. Bunlar şunlardır:
Wildcard karakter Descrip{filter}tion Örnek
% Sıfır veya daha fazla karakterden oluşan herhangi bir dizidir. BURADA '%computer%' gibi başlık, kitap başlığında 'computer' kelimesi olan tüm kitap başlıklarını bulur.
_ (altını çizer) Herhangi bir tek karakter. WHERE au_fname LIKE '_ean' kelimesi, ean ile biten dört harfli ilk isimleri (Dean, Sean vb.) bulur.
[ ] Belirtilen aralık ([a-f]) veya küme ([abcdef]) içindeki herhangi bir tek karakter. BURADA au_lname LIKE '[C-P]arsen' yazar soyadlarının arsen ile bittiğini ve C ile P arasındaki herhangi bir karakterle başladığını görür; örneğin Carsen, Larsen, Karsen ve benzeri.
[^] Belirtilen aralıkta ([^a-f]) veya kümede ([^abcdef]) olmayan herhangi bir tek karakter. BURADA au_lname 'de[^l]%' gibi tüm yazar soyadları de ile başlar ve sonraki harf l değildir.

%, sıfır uzunlukta veya herhangi bir uzunlukta bir diziyi temsil eder. _ bir karakteri gösterir. [] bir karakteri bir aralık aralığında gösterir. [^] belirli bir aralıkta olmayan bir karakteri gösterir
Mesela ne:


var q = (db'deki c'den. Müşteriler
burada SqlMethods.Like(c.CustomerID, "A_O_T")
C seçin). ToList();
Bir karakteri temsil etmek için _ kullanın. Üretilen SQL şöyledir:


[t0]'ı SEÇ. [CustomerID], [t0]. [Şirket Adı], [t0]. [İletişimName], [t0]. [ContactT
itle], [t0]. [Adres], [t0]. [Şehir], [t0]. [Bölge], [t0]. [Posta Kodu], [t0]. [Meclis
try], [t0]. [Telefon], [t0]. [Faks]
[dbo]'dan. [Müşteriler] AS [t0]
BURADA [t0]. [CustomerID] MESELA @p0
-- @p0: Giriş dizisi (boyut = 5; Prec = 0; Ölçek = 0) [A_O_T]

Not Like için de çok basit, sadece bir saçmalık ekle.


var q = (db'deki c'den. Müşteriler
nerede! SqlMethods.Like(c.CustomerID, "A_O_T")
C seçin). ToList();

SqlMethods.Like ayrıca escape karakter adı verilen bir parametreye sahiptir ve bu parametre aşağıdaki gibi bir ifadeye çevrilecektir.


TABLODAN sütunları SEÇİN, BURADA
sütun LIKE '%\%%' KAÇ '\'
Escape, bir alanın %,_ [ ] gibi özel karakterler içermesinden kaynaklanır ve bunlar joker olarak kullanılır. İşte burada Escape devreye giriyor. Bu SQL Server meselesi.





Önceki:Web Sitesi Performans Optimizasyonu: Önbellek kontrol ayarlarının ayrıntılı açıklaması
Önümüzdeki:Ruijie her zaman neler olup bittiğine kararlı olmuştur
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com