Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sorguları etkili bir şekilde yazmak için, eksiksiz bir sorgu işlemindeki değişken türlerinin birbiriyle nasıl ilişkili olduğunu anlamanız gerekir. Bu ilişkileri anlarsanız, belgelerdeki LINQ örneklerini ve kod örneklerini daha kolay anlayabilirsiniz. Ayrıca, değişkenler var
kullanılarak örtük olarak yazıldığında ne olduğunu anlayacaksınız.
LINQ sorgu işlemleri, veri kaynağında, sorgunun kendisinde ve sorgunun yürütülmesinde kesin tür tanımlıdır. Sorgudaki değişkenlerin türü, veri kaynağındaki öğelerin türüyle ve deyimindeki yineleme değişkeninin foreach
türüyle uyumlu olmalıdır. Bu güçlü yazma, tür hatalarının, kullanıcılar karşılaşmadan önce düzeltilebildiği derleme zamanında yakalanmalarını garanti eder.
Bu tür ilişkilerini göstermek için, izleyen örneklerin çoğu tüm değişkenler için açık yazma kullanır. Son örnek, var
kullanarak örtük tür belirtme kullandığınızda bile aynı ilkelerin nasıl uygulandığını gösterir.
Kaynak Verileri Dönüştürmeyen Sorgular
Aşağıdaki çizimde, verilerde dönüştürme gerçekleştirmeden LINQ to Objects sorgu işlemi gösterilmektedir. Kaynak bir dizi dize içerir ve sorgu çıkışı da bir dizi dizedir.
- Veri kaynağının tür bağımsız değişkeni, aralık değişkeninin türünü belirler.
- Seçilen nesnenin türü, sorgu değişkeninin türünü belirler. Burada
name
bir dize yer alır. Bu nedenle, sorgu değişkeni birIEnumerable<string>
'dir. - Sorgu değişkeni
foreach
ifadesi üzerinde yinelenir. Sorgu değişkeni bir dizi dize olduğundan, yineleme değişkeni de bir dizedir.
Kaynak Verileri Dönüştüren Sorgular
Aşağıdaki çizimde, veriler üzerinde basit bir dönüştürme gerçekleştiren LINQ to SQL sorgu işlemi gösterilmektedir. Sorgu, giriş olarak bir nesne dizisi Customer
alır ve sonuçta yalnızca Name
özelliği seçer. Bir Name
dize olduğundan, sorgu çıkış olarak bir dizi dize oluşturur.
- Veri kaynağının tür bağımsız değişkeni, aralık değişkeninin türünü belirler.
-
select
deyimi, tamName
nesne yerineCustomer
özelliğini döndürür.Name
bir dize olduğundan,custNameQuery
'nin tür bağımsız değişkenistring
'dir,Customer
değil. - Dize
custNameQuery
dizisi olduğundan, döngününforeach
yineleme değişkeni de birstring
olmalıdır.
Aşağıdaki çizimde biraz daha karmaşık bir dönüşüm gösterilmektedir. deyimi, select
özgün Customer
nesnenin yalnızca iki üyesini yakalayan anonim bir tür döndürür.
- Veri kaynağının tür bağımsız değişkeni her zaman sorgudaki aralık değişkeninin türüdür.
-
select
deyimi anonim bir tür oluşturduğundan, sorgu değişkenivar
kullanılarak örtük olarak yazılmalıdır. - Sorgu değişkeninin türü örtük olduğundan, döngüdeki
foreach
yineleme değişkeni de örtük olmalıdır.
Derleyicinin tür bilgilerini çıkarmasına izin verme
Bir sorgu işlemindeki tür ilişkilerini anlamanız gerekir, ancak derleyicinin tüm işleri sizin yerine yapmasına izin verme seçeneğiniz vardır. var anahtar sözcüğü, sorgu işlemindeki herhangi bir yerel değişken için kullanılabilir. Aşağıdaki çizim, daha önce açıklanan 2 numaralı örneğe benzer. Ancak, derleyici sorgu işlemindeki her değişken için güçlü türü sağlar.
LINQ ve genel türler (C#)
LINQ sorguları genel türleri temel alır. Sorgu yazmaya başlamadan önce genel bilgiler hakkında ayrıntılı bilgiye ihtiyacınız yoktur. Ancak, iki temel kavramı anlamak isteyebilirsiniz:
- gibi List<T>genel bir koleksiyon sınıfının örneğini oluşturduğunuzda, "T"yi listenin barındıracağı nesne türüyle değiştirirsiniz. Örneğin, dizelerin bir listesi olarak
List<string>
ifade edilir, ve nesne listesi olarakCustomer
ifade edilirList<Customer>
. Genel bir liste kesin olarak yazılır ve öğelerini olarak Objectdepolayan koleksiyonlara göre birçok avantaj sağlar.Customer
eklemeyeList<string>
çalışırsanız, derleme zamanında bir hata alırsınız. Çalışma zamanı tür ataması yapmanız gerekmediğinden genel koleksiyonları kullanmak kolaydır. -
IEnumerable<T> adı verilen arabirim,
foreach
deyimi kullanılarak genel koleksiyon sınıflarının numaralandırılmasını sağlar. Genel koleksiyon sınıfları, IEnumerable<T> desteklerken, tıpkı genel olmayan koleksiyon sınıflarının ArrayList desteklemesi gibi, IEnumerable destekler.
Genel değerler hakkında daha fazla bilgi için bkz. Genel değerler.
LINQ sorgularında IEnumerable<T> değişkenleri
LINQ sorgu değişkenleri IEnumerable<T> veya türetilmiş bir tür olan IQueryable<T> olarak yazılır. olarak IEnumerable<Customer>
yazılan bir sorgu değişkeni gördüğünüzde bu, sorgu yürütülürken sıfır veya daha fazla Customer
nesne dizisi oluşturacağı anlamına gelir.
IEnumerable<Customer> customerQuery = from cust in customers
where cust.City == "London"
select cust;
foreach (Customer customer in customerQuery)
{
Console.WriteLine($"{customer.LastName}, {customer.FirstName}");
}
Derleyicinin genel tür bildirimlerini işlemesine izin verme
İsterseniz , var anahtar sözcüğünü kullanarak genel söz dizimini önleyebilirsiniz.
var
anahtar sözcüğü, derleyiciye from
yan tümcesinde belirtilen veri kaynağına bakarak sorgu değişkeninin türünü çıkarması talimatını verir. Aşağıdaki örnek, önceki örnekle aynı derlenmiş kodu oluşturur:
var customerQuery2 = from cust in customers
where cust.City == "London"
select cust;
foreach(var customer in customerQuery2)
{
Console.WriteLine($"{customer.LastName}, {customer.FirstName}");
}
var
anahtar sözcüğü, değişkenin türü belirgin olduğunda veya grup sorguları tarafından oluşturulanlar gibi iç içe genel türleri açıkça belirtmek önemli olmadığında yararlıdır. Genel olarak, var
kullanıyorsanız, kodunuzun başkaları tarafından okunmasını zorlaştırabileceğini fark etmenizi öneririz. Daha fazla bilgi için Örtük Olarak Yazılan Yerel Değişkenler bölümüne bakın.