LINQ Sorgu İşlemlerinde Tür İlişkileri (C#)

Sorguları etkili bir şekilde yazmak için, bir bütün sorgu işlemindeki değişkenlerin türlerinin birbirleriyle ilişkisini anlamalısınız. Bu ilişkileri anladıysanız, belgede LINQ örneklerini ve kod örneklerini daha kolay anlarsınız. Ayrıca, değişkenler, kullanılarak örtük olarak yazıldığında ne olduğunu anlamış olursunuz var .

LINQ sorgu işlemleri veri kaynağında, sorgunun kendisinde ve sorgu yürütmesinde kesin olarak türdedir. Sorgudaki değişkenlerin türü, veri kaynağındaki öğelerin türüyle ve deyimdeki yineleme değişkeni türüyle uyumlu olmalıdır) foreach . Bu güçlü yazma, tür hatalarının Kullanıcı tarafından karşılaşmadan önce düzeltilebilecekleri derleme zamanında yakalanmasını güvence altına alır.

Bu tür ilişkilerini göstermek için, aşağıdaki örneklerin çoğu tüm değişkenler için açık yazma kullanır. Son örnek, varkullanarak örtük yazma kullandığınızda bile aynı ilkelerin nasıl uygulanacağını gösterir.

Kaynak verileri dönüştürmeksizin sorgular

aşağıdaki çizimde, verilerde dönüştürme gerçekleştirmeyen bir LINQ to Objects sorgu işlemi gösterilmektedir. Kaynak bir dize dizisi içerir ve sorgu çıktısı da dizeler dizisidir.

LINQ sorgusundaki veri türlerinin ilişkisini gösteren diyagram.

  1. Veri kaynağının tür bağımsız değişkeni, Aralık değişkeninin türünü belirler.

  2. Seçilen nesnenin türü, sorgu değişkeninin türünü belirler. İşte name bir dize. Bu nedenle, sorgu değişkeni bir IEnumerable<string> .

  3. Sorgu değişkeni, ifadesinde tekrarlanıyor foreach . Sorgu değişkeni bir dizeler dizisi olduğundan, yineleme değişkeni de bir dizedir.

Kaynak verileri dönüştüren sorgular

Aşağıdaki çizimde, LINQ - SQL verilerde basit bir dönüşüm gerçekleştiren bir sorgu işlemi gösterilmektedir. Sorgu Customer , giriş olarak bir dizi nesne alır ve yalnızca Name sonuç içindeki özelliği seçer. NameBir dize olduğundan, sorgu çıktı olarak bir dize dizisi üretir.

Veri türünü dönüştüren bir sorgu gösteren diyagram.

  1. Veri kaynağının tür bağımsız değişkeni, Aralık değişkeninin türünü belirler.

  2. selectİfade, Name tüm nesne yerine özelliği döndürür Customer . NameBir dize olduğundan, öğesinin tür bağımsız değişkeni custNameQuery string değildir Customer .

  3. custNameQueryBir dize dizisi olduğundan, foreach döngünün yineleme değişkeni de bir olmalıdır string .

Aşağıdaki çizimde biraz daha karmaşık bir dönüştürme gösterilmektedir. selectİfade, özgün nesnenin yalnızca iki üyesini yakalayan bir anonim tür döndürür Customer .

Veri türünü dönüştüren daha karmaşık bir sorgu gösteren diyagram.

  1. Veri kaynağının tür bağımsız değişkeni her zaman sorgudaki aralık değişkeninin türüdür.

  2. selectİfade anonim bir tür oluşturduğundan, sorgu değişkeninin kullanılarak örtük olarak yazılması gerekir var .

  3. Sorgu değişkeninin türü örtük olduğundan, foreach döngüdeki yineleme değişkeni de örtük olmalıdır.

Derleyicinin tür bilgilerini çıkarmalarına izin verme

Bir sorgu işlemindeki tür ilişkilerini anlamanız gerekse de, derleyicinin tüm işleri gerçekleştirmesini sağlamak için seçeneğiniz vardır. Var anahtar sözcüğü, bir sorgu işlemindeki herhangi bir yerel değişken için kullanılabilir. Aşağıdaki çizim, daha önce açıklanan örnek numarası 2 ' ye benzer. Ancak, derleyici sorgu işlemindeki her değişken için güçlü tür sağlar.

Türü örtük olarak yazılan tür akışını gösteren diyagram.

Hakkında daha fazla bilgi için var bkz. örtülü olarak yazılan yerel değişkenler.