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
namebir dize yer alır. Bu nedenle, sorgu değişkeni birIEnumerable<string>'dir. - Sorgu değişkeni
foreachifadesi ü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.
-
selectdeyimi, tamNamenesne yerineCustomerözelliğini döndürür.Namebir dize olduğundan,custNameQuery'nin tür bağımsız değişkenistring'dir,Customerdeğil. - Dize
custNameQuerydizisi olduğundan, döngününforeachyineleme değişkeni de birstringolmalı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.
-
selectdeyimi anonim bir tür oluşturduğundan, sorgu değişkenivarkullanılarak örtük olarak yazılmalıdır. - Sorgu değişkeninin türü örtük olduğundan, döngüdeki
foreachyineleme 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 olarakCustomerifade edilirList<Customer>. Genel bir liste kesin olarak yazılır ve öğelerini olarak Objectdepolayan koleksiyonlara göre birçok avantaj sağlar.CustomereklemeyeList<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,
foreachdeyimi 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.