İlk LINQ Sorgunuzu Yazma (Visual Basic)
A sorgu bir veri kaynağından veri alan bir ifadesidir.Sorguları adanmış sorgu dilinde ifade edilir.Zaman içinde farklı diller için farklı türde veri kaynağına, örneğin, ilişkisel veritabanları için sql ve XQuery xml için geliştirilmektedir.Bu, uygulama geliştiricisi, her veri kaynağı veya desteklenen veri biçimi türü için yeni bir sorgu dili öğrenmek için gerekli kılar.
Dil ile Tümleşik Sorgu (LINQ)çeşitli veri kaynakları ve biçimler arasında veri ile çalışmak için tutarlı bir model sunarak durum basitleştirir.İçinde bir LINQ , sorgu her zaman çalıştığınız sahip nesneler.Aynı temel kodlama desenler sorgulamak ve xml belgelerindeki veriler, sql veritabanları, ado.net datasets ve varlıkları, .NET Framework derlemeleri ve herhangi bir diğer kaynak veya biçim için dönüştürmek için kullandığınız bir LINQ sağlayıcı kullanılabilir.Bu belge üç aşamasının oluşturulması ve basic kullanımını açıklar LINQ sorgular.
İlgili video gösterimi için bkz: nasıl yapmak ı: Get Started LINQ ile?.
Sorgu işlemi üç aşaması
LINQSorgu işlemleri üç eylemden oluşur:
Veri kaynağı veya kaynakları edinin.
Sorgu oluşturun.
Sorguyu çalıştırın.
İçinde LINQ, sorgu oluşturulmasından bir sorgunun yürütülmesi farklıdır.Tüm verileri bir sorgu oluşturarak almak değil.Bu nokta, bu konunun ilerleyen bölümlerinde daha ayrıntılı ele alınmıştır.
Aşağıdaki örnek, sorgu işlemi üç bölümden gösterir.Örnek dizisi gösterim amacıyla uygun veri kaynağı olarak kullanır.Ancak, aynı kavramlar diğer veri kaynakları için de geçerlidir.
[!NOT]
Üzerinde Derleme Sayfası, Proje Tasarımcısı (Visual Basic), emin seçeneği gerçekleştirip ayarlamak ,.
' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}
' Query creation.
Dim evensQuery = From num In numbers
Where num Mod 2 = 0
Select num
' Query execution.
For Each number In evensQuery
Console.Write(number & " ")
Next
Çıktı:
0 2 4 6
Veri kaynağı
Önceki örnekte veri kaynağında bir dizi olduğundan, dolaylı olarak genel destekleyen IEnumerable arabirim.Bir dizi için bir veri kaynağı olarak kullanmanızı sağlayan bu gerçeği olan bir LINQ sorgu.Destekleyen türleri IEnumerable veya türetilmiş bir arabirim gibi genel IQueryable adı verilen sorgulanabilir türleri.
Dolaylı olarak sorgulanabilir bir tür olarak herhangi bir değişiklik veya olarak hizmet verecek özel işlemden dizi gerektirir bir LINQ veri kaynağı.Aynı destekleyen herhangi bir koleksiyon türü için geçerlidir IEnumerable, genel de dahil olmak üzere List, Dictionaryve diğer sınıflarda .NET Framework sınıf kitaplığı.
Kaynak veriler zaten uygulamayan, IEnumerable, LINQ sağlayıcı işlevselliğini uygulamak için gerekli Standart sorgu işleçler bu veri kaynağı için.Örneğin, LINQ - XML bir xml belgesi sorgulanabilir yüklenirken işini işler XElement , aşağıdaki örnekte gösterildiği gibi yazın.Standart sorgu işleçler hakkında daha fazla bilgi için bkz: Standart Sorgu İşleçlerine Genel Bakış.
' Create a data source from an XML document.
Dim contacts = XElement.Load("c:\myContactList.xml")
İle LINQ - SQL, ilk önce bir nesne ilişkisel tasarım zamanında, el ile veya kullanarak eşleme oluşturma Object Relational Designer (O/R Designer).Sorgularınızı nesneler karşı ve çalışma zamanında yaz LINQ - SQL veritabanı ile iletişimi yönetir.Aşağıdaki örnekte, customers veritabanındaki belirli bir tabloyu temsil eder ve Table destekler genel IQueryable.
' Create a data source from a SQL table.
Dim db As New DataContext("C:\Northwind\Northwnd.mdf")
Dim customers As Table(Of Customer) = db.GetTable(Of Customer)
Belirli tür veri kaynağı oluşturma hakkında daha fazla bilgi için çeşitli belgelerine bakın LINQ sağlayıcıları.(Bu sağlayıcılar listesi için bkz: LINQ (Dil ile Tümleşik Sorgu).) Temel Kural basittir: bir LINQ veri kaynağı olan genel destekleyen herhangi bir nesne IEnumerable devralan bir arabirim veya arabirim.
[!NOT]
Gibi türleri ArrayList genel olmayan Destek IEnumerable arabirimi da kullanılabilir olarak LINQ veri kaynakları.Kullanan bir örnek bir ArrayList, bkz: Nasıl yapılır: LINQ ile ArrayList Sorgulama.
Sorgu
Sorguda, veri kaynağı veya kaynakları almak istediğiniz bilgileri belirtin.Aynı zamanda nasıl bu bilgileri sıralanmış, gruplandırılmış veya onu döndürülmeden önce yapılandırılmış belirtme seçeneğiniz vardır.Sorgu oluşturmayı etkinleştirmek için Visual Basic diline yeni sorgu sözdizimi birleştirmiştir.
Yürütüldüğünde, sorgu aşağıdaki örnekte tüm çift sayılar tamsayı diziden verir numbers.
' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}
' Query creation.
Dim evensQuery = From num In numbers
Where num Mod 2 = 0
Select num
' Query execution.
For Each number In evensQuery
Console.Write(number & " ")
Next
Üç yan tümcelerini sorgu ifadesi içeriyor: From, Where, ve Select.Belirli bir işlevi ve amacı, her sorgu ifade yan tümcesi ele alınmıştır Temel Sorgu İşlemleri (Visual Basic).Daha fazla bilgi için bkz. Sorgular (Visual Basic).Unutmayın, LINQ, sorgu tanımı genellikle bir değişkende depolanan ve daha sonra yürütülür.Sorgu değişken gibi evensQuery önceki örnekte sorgulanabilir bir tür olmalıdır. Türü evensQuery olan IEnumerable(Of Integer), yerel tür çıkarımı kullanarak derleyici tarafından atanmış.
Sorgu değişkeni hiçbir eylemde bulunmaz ve hiçbir veri döndürür bilinmesi önemlidir.Bunu yalnızca sorgu tanımını depolar.Önceki örnekte olduğu For Each döngü sorguyu yürütür.
Sorgu yürütme
Sorgu yürütme sorgu oluşturma ' farklıdır.Sorguyu sorgu oluşturma tanımlar, ancak yürütme farklı bir mekanizma tarafından tetiklenir.Tanımlandığı gibi bir sorgu yürütülebilecek (hemen bir yürütme), veya tanım depolanabilir ve sorguyu daha sonra yürütülebilecek (Ertelenmiş yürütme).
Ertelenmiş yürütme
Tipik bir LINQ benzer bir önceki örnekte, sorgu evensQuery tanımlanır.Sorgu oluşturur ancak hemen yürütmez.Bunun yerine, sorgu tanımını sorgu değişkeninde saklanan evensQuery.Sorguyu daha sonra genellikle kullanarak yürütmek bir For Each gibi bir standart sorgu işlecini uygulayarak ya da değerler dizisi verir döngü, Count veya Max.Bu işlem için olarak adlandırılır Ertelenmiş yürütme.
' Query execution that results in a sequence of values.
For Each number In evensQuery
Console.Write(number & " ")
Next
' Query execution that results in a single value.
Dim evens = evensQuery.Count()
Değerleri bir dizi için alınan yineleme değişkeni kullanarak verilere For Each döngü (number önceki örnekte).Çünkü sorgu değişkeni evensQuery, sorgu sonuçları yerine sorgu tanımını içeren bir sorgu, birden fazla kez sorgu değişkeni kullanarak istediğiniz sıklıkta çalıştırabilirsiniz.Örneğin, uygulamanızda ayrı bir uygulama tarafından sürekli olarak güncelleştirilen bir veritabanı olabilir.Bu veritabanından veri alan bir sorgu oluşturduktan sonra kullanabileceğiniz bir For Each sorguyu tekrar tekrar yürütmek için döngü her zaman en güncel verileri alınıyor.
Aşağıdaki örnek, nasıl ertelenmiş yürütme gösterir çalışır.Sonra evensQuery2 tanımlanan ve birlikte yürütülen bir For Each , önceki örneklerde olduğu gibi veri kaynağı içindeki bazı öğeler döngü numbers değiştirilir.Daha sonra ikinci For Each döngü çalışır evensQuery2 yeniden.Sonuçlar ikinci kez farklı, çünkü For Each döngü yürütür sorgu yeniden, yeni değerler kullanarak numbers.
Dim numberArray() = {0, 1, 2, 3, 4, 5, 6}
Dim evensQuery2 = From num In numberArray
Where num Mod 2 = 0
Select num
Console.WriteLine("Evens in original array:")
For Each number In evensQuery2
Console.Write(" " & number)
Next
Console.WriteLine()
' Change a few array elements.
numberArray(1) = 10
numberArray(4) = 22
numberArray(6) = 8
' Run the same query again.
Console.WriteLine(vbCrLf & "Evens in changed array:")
For Each number In evensQuery2
Console.Write(" " & number)
Next
Console.WriteLine()
Çıktı:
Evens in original array:
0 2 4 6
Evens in changed array:
0 10 2 22 8
Hemen bir yürütme
Ertelenmiş yürütme sorgular, sorgu tanımı daha sonra çalıştırılmak için bir sorgu değişkeni depolanır.Hemen bir yürütme sorgu tanımı anda yürütülür.Yürütme, sorgu sonucu, tek tek öğelere erişim gerektiren bir yöntemi uygulandığında tetiklenir.Hemen yürütme genellikle tek bir değer standart sorgu işleçler kullanarak zorladı.Examples are Count, Max, Average, and First.Bu standart sorgu işleçler hesaplamak ve tek olan bir sonuca dönmek için uygulanan sorguyu çalıştırın.Tek bir değer standart sorgu işleçler hakkında daha fazla bilgi için bkz: Toplama İşlemleri, Öğe İşlemleri, ve Niceleyici İşlemleri.
Aşağıdaki sorgu sayısı çift sayı dizisi döndürür.Sorgu tanımının kaydedilmemişse, ve numEvens olan basit bir Integer.
Dim numEvens = (From num In numbers
Where num Mod 2 = 0
Select num).Count()
Kullanarak aynı sonucu elde Aggregate yöntem.
Dim numEvensAgg = Aggregate num In numbers
Where num Mod 2 = 0
Select num
Into Count()
Çağırarak bir sorgunun yürütülmesi de zorunlu ToList veya ToArray yöntemi (hemen) sorgu veya sorgu değişkeni (ertelenmiş), aşağıdaki kodda gösterildiği gibi.
' Immediate execution.
Dim evensList = (From num In numbers
Where num Mod 2 = 0
Select num).ToList()
' Deferred execution.
Dim evensQuery3 = From num In numbers
Where num Mod 2 = 0
Select num
' . . .
Dim evensArray = evensQuery3.ToArray()
Önceki örneklerde, evensQuery3 bir sorgu değişkeni, ancak evensList bir listedir ve evensArray bir dizidir.
Kullanarak ToList veya ToArray hemen zorlamak için yürütme hemen sorguyu çalıştırmak ve sonuçları bir tek koleksiyon nesnesi önbelleğe istediğiniz senaryolarda kullanışlıdır.Bu yöntemler hakkında daha fazla bilgi için bkz. Veri Türlerini Dönüştürme.
Bir sorgu kullanarak yürütülecek neden olabilir bir IEnumerable yöntemi gibi System#Collections#IEnumerable#GetEnumerator yöntem.
İlgili Video gösteriler
Video nasıl yapılır: Visual Basic'te sorguları yazma
Ayrıca bkz.
Görevler
Kavramlar
Yerel Türü Arabirimi (Visual Basic Başvurusu)
Standart Sorgu İşleçlerine Genel Bakış