LINQ - Hızlı Kılavuz

Dünyanın dört bir yanındaki geliştiriciler, tanımlanmış bir yolun olmaması ve SQL, Web Hizmetleri, XQuery vb.

Visual Studio 2008'de sunulan ve Anders Hejlsberg tarafından tasarlanan LINQ (Dil Tümleşik Sorgu), SQL, XML vb. Gibi sorgu dilleri bilgisi olmadan bile sorgu yazılmasına izin verir. LINQ sorguları çeşitli veri türleri için yazılabilir.

LINQ sorgusu örneği

C #

using System;
using System.Linq;

class Program {
   static void Main() {
   
      string[] words = {"hello", "wonderful", "LINQ", "beautiful", "world"};
		
      //Get only short words
      var shortWords = from word in words where word.Length <= 5 select word;
	    
      //Print each word out
      foreach (var word in shortWords) {
         Console.WriteLine(word);
      }	 
		
      Console.ReadLine();
   }
}

VB

Module Module1
   Sub Main()
      Dim words As String() = {"hello", "wonderful", "LINQ", "beautiful", "world"}
     
      ' Get only short words
      Dim shortWords = From word In words _ Where word.Length <= 5 _ Select word
     
      ' Print each word out.
	  
      For Each word In shortWords
         Console.WriteLine(word)
      Next
	  
      Console.ReadLine()
   End Sub
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

hello 
LINQ 
world

LINQ sözdizimi

LINQ'nun iki sözdizimi vardır. Bunlar aşağıdakilerdir.

Lamda (Yöntem) Sözdizimi

var longWords = words.Where( w ⇒ w.length > 10);
Dim longWords = words.Where(Function(w) w.length > 10)

Sorgu (Anlama) Sözdizimi

var longwords = from w in words where w.length > 10;
Dim longwords = from w in words where w.length > 10

LINQ türleri

LINQ türleri aşağıda kısaca belirtilmiştir.

  • LINQ to Objects
  • LINQ to XML (XLINQ)
  • LINQ to DataSet
  • LINQ to SQL (DLINQ)
  • LINQ to Entities

Yukarıdakilerin dışında, Microsoft'un paralel LINQ'su olan PLINQ adlı bir LINQ türü de vardır.

.NET'te LINQ Mimarisi

LINQ, en üst katmanın dil uzantılarından ve alt katmanın tipik olarak IEnumerable <T> veya IQueryable <T> genel arabirimlerini uygulayan nesneler olan veri kaynaklarından oluştuğu 3 katmanlı bir mimariye sahiptir. Mimari aşağıda gösterilmiştir.

Sorgu İfadeleri

Sorgu ifadesi, Select, Where ve OrderBy gibi sorgu operatörleri ile SQL'e benzer bir biçimde ifade edilen LINQ sorgusundan başka bir şey değildir. Sorgu ifadeleri genellikle "Kimden" anahtar kelimesiyle başlar.

Standart LINQ sorgu işleçlerine erişmek için, System.Query ad alanı varsayılan olarak içe aktarılmalıdır. Bu ifadeler, C # 3.0 olan bildirim temelli bir sorgu sözdizimi içinde yazılmıştır.

Aşağıda, veri kaynağı oluşturma, sorgu ifade tanımı ve sorgu yürütmeden oluşan eksiksiz bir sorgu işlemini gösteren bir örnek bulunmaktadır.

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators {
   class LINQQueryExpressions {
      static void Main() {
      
         // Specify the data source.
         int[] scores = new int[] { 97, 92, 81, 60 };

         // Define the query expression.
         IEnumerable<int> scoreQuery = from score in scores where score > 80 select score;

         // Execute the query.
		 
         foreach (int i in scoreQuery) {
            Console.Write(i + " ");
         }
		 
         Console.ReadLine();
      }
   }
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

97 92 81

Uzatma Yöntemleri

.NET 3.5 ile tanıtılan Uzantı yöntemleri yalnızca statik sınıflarda bildirilir ve bir sınıfı o sınıfın gerçek bir üyesi olmadan genişletmek için bazı kesin sorgu işlemlerini gerçekleştirmek için nesnelere özel yöntemlerin dahil edilmesine izin verir. Bunlar da aşırı yüklenebilir.

Özetle, uzantı yöntemleri, sorgu ifadelerini geleneksel yöntem çağrılarına (nesneye yönelik) çevirmek için kullanılır.

LINQ ve Stored Procedure arasındaki fark

LINQ ve Stored prosedürleri arasında bir dizi fark vardır. Bu farklılıklar aşağıda belirtilmiştir.

  • Depolanan prosedürler, beklenen bir yürütme planını takip ettikleri için LINQ sorgusundan çok daha hızlıdır.

  • Bir LINQ sorgusu yürütürken çalışma zamanı hatalarından kaçınmak, saklı yordamla karşılaştırıldığında, Visual Studio'nun Intellisense desteğinin yanı sıra derleme sırasında tam tür denetimine sahip olduğundan daha kolaydır.

  • LINQ, saklanan yordamlarda olmayan .NET hata ayıklayıcısını kullanarak hata ayıklamaya izin verir.

  • LINQ, çeşitli veritabanı türleri için kodun yeniden yazılmasının gerekli olduğu depolanan prosedürlerin aksine, birden çok veritabanı için destek sunar.

  • LINQ tabanlı çözümün dağıtımı, bir dizi saklı yordamın dağıtımına kıyasla kolay ve basittir.

LINQ Gerekiyor

LINQ'dan önce, eksiksiz bir uygulama oluşturmak için C #, SQL ve her ikisini birbirine bağlayan çeşitli API'leri öğrenmek çok önemliydi. Bu veri kaynakları ve programlama dilleri bir empedans uyumsuzluğu ile karşı karşıyadır; kısa kodlama ihtiyacı hissedilir.

Aşağıda, LINQ gelmeden önce bir veriyi sorgularken geliştiriciler tarafından kaç farklı teknik kullanıldığına dair bir örnek verilmiştir.

SqlConnection sqlConnection = new SqlConnection(connectString);
SqlConnection.Open();

System.Data.SqlClient.SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;

sqlCommand.CommandText = "Select * from Customer";
return sqlCommand.ExecuteReader (CommandBehavior.CloseConnection)

İlginç bir şekilde, öne çıkan kod satırlarından sorgu yalnızca son ikisi tarafından tanımlanır. LINQ kullanılarak, aynı veri sorgusu, aşağıda belirtilen aşağıdaki gibi okunabilir renk kodlu bir biçimde, çok daha kısa sürede yazılabilir.

Northwind db = new Northwind(@"C:\Data\Northwnd.mdf");
var query = from c in db.Customers select c;

LINQ'nun avantajları

LINQ bir dizi avantaj sunar ve bunların arasında en önemlisi, geliştiricilerin bildirimsel olarak ifade etmelerini sağlayan güçlü ifade gücüdür. LINQ'nun diğer avantajlarından bazıları aşağıda verilmiştir.

  • LINQ, tasarım sırasında hataları bulmaya yardımcı olan sözdizimi vurgulama sunar.

  • LINQ, daha doğru sorguları kolayca yazmak anlamına gelen IntelliSense'i sunar.

  • LINQ'da kod yazmak oldukça hızlıdır ve bu nedenle geliştirme süresi de önemli ölçüde azalır.

  • LINQ, C # dilindeki entegrasyonu nedeniyle hata ayıklamayı kolaylaştırır.

  • Hiyerarşik özelliği nedeniyle LINQ ile iki tablo arasındaki ilişkiyi görüntülemek kolaydır ve bu, birden çok tabloyu daha kısa sürede birleştiren sorguların oluşturulmasını sağlar.

  • LINQ, birçok farklı veri kaynağını sorgularken tek bir LINQ sözdiziminin kullanımına izin verir ve bu, esas olarak üniter temelinden kaynaklanmaktadır.

  • LINQ genişletilebilir, yani yeni veri kaynağı türlerini sorgulamak için LINQ bilgisini kullanmanın mümkün olduğu anlamına gelir.

  • LINQ, çeşitli veri kaynaklarını tek bir sorguda birleştirme ve karmaşık sorunları, hata ayıklaması kolay kısa sorgulara ayırma olanağı sunar.

  • LINQ, SQL verilerini XML verilerine dönüştürmek gibi bir veri türünün diğerine dönüştürülmesi için kolay dönüşüm sunar.

LINQ programlarına başlamadan önce, bir LINQ ortamı kurmanın nüanslarını anlamak en iyisidir. LINQ, çok çeşitli uygulamalara sahip olmak için devrim niteliğinde bir platform olan .NET çerçevesine ihtiyaç duyar. LINQ sorgusu, C # veya Visual Basic'te rahatlıkla yazılabilir.

Microsoft, Visual Studio aracılığıyla bu dillerin her ikisi için, yani C # ve Visual Basic için araçlar sunmaktadır. Örneklerimizin tamamı Visual Studio 2010'da derlenmiş ve yazılmıştır. Bununla birlikte, Visual Basic 2013 sürümü de kullanılabilir. En son sürümdür ve Visual Studio 2012 ile birçok benzerliği vardır.

Windows 7'ye Visual Studio 2010 Yüklenmesini Sağlama

Visual Studio, DVD gibi bir yükleme medyasından yüklenebilir. Visual Basic 2010'u sisteminize başarıyla yüklemek için yönetici kimlik bilgileri gereklidir. Kurulumdan önce tüm çıkarılabilir USB bağlantılarını sistemden çıkarmak çok önemlidir, aksi takdirde kurulum başarısız olabilir. Kurulum için gerekli olan bazı donanım gereksinimleri aşağıda belirtilmiştir.

Donanım Gereksinimleri

  • 1,6 GHz veya üzeri
  • 1 GB RAM
  • 3 GB (Kullanılabilir sabit disk alanı)
  • 5400 RPM sabit disk sürücüsü
  • DirectX 9 uyumlu ekran kartı
  • DVD-ROM sürücüsü

Kurulum Adımları

Step 1 - Önce DVD'yi Visual Studio 2010 Paketi ile yerleştirdikten sonra, Install or run program from your media ekranda bir pop-up kutuda görünmesi.

Step 2- Şimdi ekranda Visual Studio için kurulum görünecektir. SeçInstall Microsoft Visual Studio 2010.

Step 3- Tıkladığınız anda işlem başlatılacak ve ekranınızda bir kurulum penceresi görünecektir. Biraz zaman alacak olan kurulum bileşenlerinin yüklenmesi tamamlandıktan sonra,Next Sonraki adıma geçmek için düğmesine basın.

Step 4 - Bu, kurulumun son adımıdır ve sadece "Lisans koşullarını okudum ve kabul ediyorum" u seçip tıklayan bir başlangıç ​​sayfası görünecektir. Next buton.

Step 5- Şimdi ekranınızda görünen seçenekler sayfasından yüklenecek özellikleri seçin. Ya seçebilirsinizFull veya Customseçeneği. Disk alanı gereksinimlerinde gösterilenden daha az disk alanınız varsa, Özel'e gidin.

Step 6- Özel seçeneğini seçtiğinizde, aşağıdaki pencere görünecektir. Kurmak istediğiniz özellikleri seçin ve tıklayınUpdate ya da 7. adıma gidin. Ancak, gelecekte sahip olmamayı seçtiğiniz özelliklere ihtiyaç duyabileceğiniz için özel seçenekle gitmemeniz önerilir.

Step 7- Yakında bir açılır pencere gösterilecek ve kurulum başlayacak, bu da uzun sürebilir. Unutmayın, bu tüm bileşenleri kurmak içindir.

Step 8- Son olarak, kurulumun başarıyla tamamlandığına dair bir pencerede bir mesaj görebileceksiniz. TıklayınFinish.

Visual Studio 2010'da LINQ kullanarak C # Programı yazma

  • Visual Studio 2010 Ultimate sürümünü başlatın ve menüden Dosya ve ardından Yeni Proje'yi seçin.

  • Ekranınızda yeni bir proje iletişim kutusu görünecektir.

  • Şimdi, yüklenen şablonlar altında kategori olarak Visual C # seçin ve ardından aşağıdaki şekilde gösterildiği gibi Konsol Uygulaması şablonunu seçin.

  • Alt isim kutusunda projenize bir isim verin ve Tamam'a basın.

  • Yeni proje, ekranınızdaki yeni bir iletişim kutusunun sağ tarafındaki Çözüm Gezgini'nde görünecektir.

  • Şimdi Solution Explorer'dan Program.cs'i seçin ve 'using System' ile başlayan editör penceresinde kodu görüntüleyebilirsiniz.

  • Buradan aşağıdaki C # programınızı kodlamaya başlayabilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
			
namespace HelloWorld {
   class Program {
      static void Main(string[] args) {
      
         Console.WriteLine("Hello World")
         Console.ReadKey();
      } 		
   }
}
  • F5 tuşuna basın ve projenizi çalıştırın. Projeyi seçerek kaydetmeniz şiddetle tavsiye edilir.FileSave All projeyi çalıştırmadan önce.

Visual Studio 2010'da LINQ kullanarak VB Programı yazma

  • Visual Studio 2010 Ultimate sürümünü başlatın ve menüden Dosya ve ardından Yeni Proje'yi seçin.

  • Ekranınızda yeni bir proje iletişim kutusu görünecektir.

  • Şimdi, yüklenmiş şablonlar altında bir kategori olarak Visual Basic'i seçin ve ardından Konsol Uygulaması şablonunu seçin.

  • Alt isim kutusunda projenize bir isim verin ve Tamam'a basın.

  • Module1.vb ile bir ekran alacaksınız. LINQ kullanarak VB kodunuzu buraya yazmaya başlayın.

Module Module1

   Sub Main()
      Console.WriteLine("Hello World")
      Console.ReadLine()
   End Sub
   
End Module
  • F5 tuşuna basın ve projenizi çalıştırın. Projeyi seçerek kaydetmeniz şiddetle tavsiye edilir.FileSave All projeyi çalıştırmadan önce.

Yukarıdaki C # veya VB kodu kırpılıp çalıştırıldığında, aşağıdaki sonucu verir -

Hello World

Bir sorgu modelini oluşturan bir dizi uzantı yöntemi LINQ Standart Sorgu Operatörleri olarak bilinir. LINQ sorgu ifadelerinin yapı taşları olarak, bu operatörler filtreleme, sıralama, projeksiyon, toplama vb. Gibi bir dizi sorgu yeteneği sunar.

LINQ standart sorgu operatörleri, işlevselliklerine göre aşağıdaki kategorilere ayrılabilir.

  • Filtreleme Operatörleri
  • Operatörlere Katılın
  • Projeksiyon İşlemleri
  • Sıralama Operatörleri
  • Gruplama Operatörleri
  • Conversions
  • Concatenation
  • Aggregation
  • Niceleyici İşlemleri
  • Bölme İşlemleri
  • Üretim İşlemleri
  • İşlemleri Ayarla
  • Equality
  • Eleman Operatörleri

Filtreleme Operatörleri

Filtreleme, sonuç kümesini, yalnızca belirli bir koşulu karşılayan seçili öğelere sahip olacak şekilde kısıtlama işlemidir.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
nerede Doğrulama işlevine göre değerleri filtreleme nerede Nerede
OfType Değerleri, belirtilen tür olma yeteneklerine göre filtrele Uygulanamaz Uygulanamaz

Operatörlere Katılın

Birleştirme, birbirleriyle ilişkileri takip etmesi zor olan veri kaynaklarının doğrudan hedeflendiği bir işlemi ifade eder.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Katılmak Operatör, eşleşen tuşlara göre iki sırayı birleştirir katıl… içinde… eşittir… eşittir… X In…, y In… Burada xa = ya
GroupJoin İki diziyi birleştirin ve eşleşen öğeleri gruplandırın katıl… içinde… açık… eşittir…… Gruba Katıl… Giriş… Açık…

Projeksiyon İşlemleri

Projeksiyon, bir nesnenin yalnızca belirli özelliklere sahip tamamen yeni bir forma dönüştürüldüğü bir işlemdir.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Seçiniz Operatör, değerleri bir dönüştürme işlevi temelinde yansıtır seç Seçiniz
SelectMany Operatör, bir dönüştürme işlevine dayanan ve aynı zamanda bunları tek bir dizide düzleştiren değer dizilerini yansıtır Birden çok cümlecik kullan Birden çok From cümlesi kullanın

Sıralama Operatörleri

Bir sıralama işlemi, bir dizinin öğelerinin tek veya daha fazla öznitelik temelinde sıralanmasına izin verir.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Tarafından sipariş Operatör, değerleri artan düzende sıralar tarafından sipariş Tarafından sipariş
OrderByDescending Operatör, değerleri azalan düzende sıralar siparişe göre ... azalan Sıralama Ölçütü ... Azalan
ThenBy Artan sırada ikincil bir sıralama yürütür tarafından sipariş …, … Tarafından sipariş …, …
ThenByDescending Azalan sırada ikincil bir sıralama yürütür siparişe göre…,… azalan Sıralama Ölçütü…,… Azalan
Tersine çevirmek Bir koleksiyondaki öğelerin sırasını tersine çevirir Uygulanamaz Uygulanamaz

Gruplama Operatörleri

Operatörler verileri ortak bir paylaşılan özniteliğe göre bazı gruplara koyarlar.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
GroupBy Bir öğe dizisini gruplar halinde düzenleyin ve bunları IGrouping <anahtar, öğe> türünde bir IEnumerable koleksiyonu olarak geri döndürün grupla… grupla… tarafından… içine… Grupla… Gönderen… İçine…
ToLookup Bir dizi anahtar çiftinin döndürüldüğü bir gruplama işlemini yürütün Uygulanamaz Uygulanamaz

Dönüşümler

Operatörler giriş nesnelerinin türünü değiştirir ve çok çeşitli uygulamalarda kullanılır.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
AsEnumerable Yazılan girdiyi IEnumerable <T> olarak döndürür Uygulanamaz Uygulanamaz
AsQueryable Bir (genel) IEnumerable, (genel) bir IQueryable'a dönüştürülür Uygulanamaz Uygulanamaz
Oyuncular Bir koleksiyonun öğelerinin belirli bir türe dönüştürülmesini gerçekleştirir Açıkça yazılmış bir aralık değişkeni kullanın. Örneğin: dizeden dizge olarak Kimden… Olarak…
OfType Değerleri, belirli bir türe dönüştürülme yeteneklerine bağlı olarak filtreler Uygulanamaz Uygulanamaz
Sıralamak Sorgu yürütmeyi zorlar ve bir koleksiyonun bir diziye dönüştürülmesini sağlar Uygulanamaz Uygulanamaz
ToDictionary Bir anahtar seçici işlevi temelinde, öğeleri bir Dictionary <TKey, TValue> olarak ayarlayın ve LINQ sorgusunun yürütülmesini zorlar Uygulanamaz Uygulanamaz
Listeye Bir koleksiyonu List <T> 'ye dönüştürerek bir sorgunun yürütülmesini zorlar Uygulanamaz Uygulanamaz
ToLookup Bir sorgunun yürütülmesini zorlar ve anahtar seçici işlevi temelinde öğeleri bir Lookup <TKey, TElement> 'e yerleştirir Uygulanamaz Uygulanamaz

Birleştirme

İki dizinin birleştirilmesini gerçekleştirir ve yinelenenleri kaldırmaması dışında, çalışması açısından Union operatörüne oldukça benzer.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Concat Tek bir dizinin oluşturulması için iki dizi birleştirilir. Uygulanamaz Uygulanamaz

Toplama

Her türlü istenen toplama işlemini gerçekleştirir ve LINQ'da özel toplamalar oluşturmaya izin verir.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Agrega Özel toplama işlemi gerçekleştirmek için bir koleksiyonun değerleri üzerinde çalışır Uygulanamaz Uygulanamaz
Ortalama Bir değer koleksiyonunun ortalama değeri hesaplanır Uygulanamaz Topla… İçinde… Ortalamaya ()
Miktar Koleksiyondaki bir yüklem işlevini karşılayan öğeleri sayar Uygulanamaz Topla… İçinde… Saymaya ()
LonCount Büyük bir koleksiyondaki bir yüklem işlevini karşılayan öğeleri sayar Uygulanamaz LongCount () İçine… Topla
Max Bir koleksiyondaki maksimum değeri bulun Uygulanamaz Topla… İçerisinde… Maks. () İçerisinde
Min Bir koleksiyonda mevcut olan minimum değeri bulun Uygulanamaz Topla… İçinde… En Az ()
Toplam Bir koleksiyondaki değerlerin toplamını bulun Uygulanamaz Topla… İçinde… Topla ()

Niceleyici İşlemleri

Bu operatörler, bir dizideki bazı veya tüm öğeler belirli bir koşulu karşıladığında, Doğru veya Yanlış gibi bir Boole değeri döndürür.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Herşey Bir dizinin tüm öğeleri bir yüklem koşulunu karşılıyorsa 'True' değerini döndürür Uygulanamaz Topla… İçinde… Hepsi İçinde (…)
Hiç Aynı öğenin herhangi bir öğesinin belirli bir koşulu karşılayıp karşılamadığını bir dizi arayarak belirler Uygulanamaz Topla… İçinde… Herhangi Birine ()
İçerir Bir dizide belirli bir öğenin bulunduğunu bulursa, dizi o belirli öğeyi içermiyorsa, "Doğru" değeri döndürür, "yanlış" değer döndürülür Uygulanamaz Uygulanamaz

Bölüm Operatörleri

Bir giriş sırasını, sıranın öğelerini yeniden düzenlemeden ve ardından bunlardan birini döndürmeden iki ayrı bölüme ayırın.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Atla Bir dizideki belirli sayıda öğeyi atlar ve kalanları döndürür Uygulanamaz Atla
SkipWhile Atlanacak öğe sayısının bir Boolean koşulu tarafından belirtilmesi dışında, Skip ile aynı Uygulanamaz Şu Anda Atla
Al Bir diziden belirli sayıda öğe alın ve kalanları atlayın Uygulanamaz Al
TakeWhile Alınacak eleman sayısının bir Boole koşuluyla belirtilmesi dışında Take ile aynı Uygulanamaz Zaman Al

Üretim İşlemleri

Kuşak operatörler tarafından yeni bir değerler dizisi oluşturulur.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
DefaultIfEmpty Boş bir diziye uygulandığında, bir dizi içinde varsayılan bir öğe oluştur Uygulanamaz Uygulanamaz
Boş Boş bir değer dizisi döndürür ve en basit nesilsel operatördür Uygulanamaz Uygulanamaz
Aralık Bir dizi tam sayı veya sayı içeren bir koleksiyon oluşturur Uygulanamaz Uygulanamaz
Tekrar et Belirli bir uzunlukta tekrarlanan değerleri içeren bir dizi oluşturur Uygulanamaz Uygulanamaz

İşlemleri Ayarla

Ayarlanmış işlemler için, her biri farklı kriterlere göre bir sonuç veren dört operatör vardır.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
Farklı Varsa yinelenen verileri filtreleyerek bir koleksiyondaki benzersiz değerlerin bir listesini verir Uygulanamaz Farklı
Dışında İki koleksiyonun değerlerini karşılaştırır ve bir koleksiyondan diğerinde olmayanları döndürür Uygulanamaz Uygulanamaz
Kesişim İki ayrı koleksiyonda aynı bulunan değerler kümesini verir Uygulanamaz Uygulanamaz
Birlik İki farklı koleksiyonun içeriğini, yinelenen içerik olmadan da tek bir listede birleştirir Uygulanamaz Uygulanamaz

Eşitlik

İki cümleyi (numaralandırılabilir) karşılaştırır ve tam bir eşleşme olup olmadığını belirler.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
SıraEqual İki dizinin birbiriyle aynı olduğu bulunursa bir Boolean değeri verir Uygulanamaz Uygulanamaz

Eleman Operatörleri

DefaultIfEmpty dışında kalan tüm sekiz standart sorgu öğesi işleci bir koleksiyondan tek bir öğe döndürür.

Örnekleri Göster

Şebeke Açıklama C # Sorgu İfadesi Sözdizimi VB Sorgu İfadesi Sözdizimi
ElementAt Bir koleksiyondaki belirli bir dizinde bulunan bir öğeyi döndürür Uygulanamaz Uygulanamaz
ElementAtOrDefault Element ile aynı: Belirli dizinin aralık dışında olması durumunda da varsayılan bir değer döndürmesi dışında Uygulanamaz Uygulanamaz
İlk Bir koleksiyondaki ilk öğeyi veya belirli bir koşulu karşılayan ilk öğeyi alır Uygulanamaz Uygulanamaz
FirstOrDefault İlk ile aynı, ancak bu tür öğelerin olmaması durumunda varsayılan bir değer döndürmesi dışında Uygulanamaz Uygulanamaz
Son Bir koleksiyonda bulunan son öğeyi veya belirli bir koşulu karşılayan son öğeyi alır Uygulanamaz Uygulanamaz
LastOrDefault Son ile aynı, ancak böyle bir öğenin mevcut olmaması durumunda varsayılan bir değer döndürmesi dışında Uygulanamaz Uygulanamaz
Tek Bir koleksiyonun yalnız öğesini veya belirli bir koşulu karşılayan tek öğeyi döndürür Uygulanamaz Uygulanamaz
SingleOrDefault Tek ile aynıdır, tek farkı, böyle bir tek elemanın mevcut olmaması durumunda ayrıca bir varsayılan değer döndürmesidir. Uygulanamaz Uygulanamaz
DefaultIfEmpty Koleksiyon veya liste boşsa veya boşsa varsayılan bir değer döndürür Uygulanamaz Uygulanamaz

LINQ to SQL, ilişkisel verilerin nesneler olarak yönetimi için bir altyapı (çalışma zamanı) sunar. .NET Framework 3.5 sürümünün bir bileşenidir ve nesne modelinin dil ile tümleşik sorgularının SQL'e çevirisini ustalıkla yapar. Bu sorgular daha sonra yürütme amacıyla veritabanına gönderilir. Veritabanından sonuçları aldıktan sonra, LINQ to SQL bunları tekrar nesnelere çevirir.

LINQ To SQL'e Giriş

Çoğu ASP.NET geliştiricisi için, LINQ to SQL (DLINQ olarak da bilinir), her zamanki LINQ ifadelerini kullanarak SQL sunucu veritabanındaki verileri sorgulamaya olanak tanıdığından, Dil Tümleşik Sorgu'nun heyecan verici bir parçasıdır. Ayrıca verilerin güncellenmesine, silinmesine ve eklenmesine izin verir, ancak yaşadığı tek dezavantaj, SQL sunucusu veritabanıyla sınırlandırılmasıdır. Ancak, LINQ to SQL'in ADO.NET'e göre azaltılmış karmaşıklık, az sayıda kodlama satırı ve çok daha fazlası gibi pek çok avantajı vardır.

Aşağıda LINQ to SQL'in yürütme mimarisini gösteren bir diyagram bulunmaktadır.

LINQ to SQL Nasıl Kullanılır?

Step 1- Veritabanı sunucusuyla yeni bir "Veri Bağlantısı" yapın. Görüntüle & arrar; Sunucu Gezgini & arrar; Veri Bağlantıları & arrar; Bağlantı Ekle

Step 2 - LINQ To SQL sınıf dosyasına ekle

Step 3 - Veritabanından tabloları seçin ve yeni LINQ to SQL sınıf dosyasına sürükleyip bırakın.

Step 4 - Sınıf dosyasına tablolar eklendi.

LINQ to SQL ile sorgulama

LINQ to SQL ile bir sorgu yürütme kuralları, standart bir LINQ sorgusununkine benzer, yani sorgu ertelenmiş veya anında yürütülür. LINQ to SQL ile bir sorgunun yürütülmesinde rol oynayan çeşitli bileşenler vardır ve bunlar aşağıdakilerdir.

  • LINQ to SQL API - bir uygulama adına sorgu yürütme ister ve bunu LINQ'ya SQL Sağlayıcısına gönderir.

  • LINQ to SQL Provider - sorguyu Transact SQL'e (T-SQL) dönüştürür ve yeni sorguyu yürütülmesi için ADO Sağlayıcısına gönderir.

  • ADO Provider - Sorgu çalıştırıldıktan sonra, sonuçları bir DataReader biçiminde LINQ'ya SQL Sağlayıcısına gönderin, bu da onu bir kullanıcı nesnesi biçimine dönüştürür.

LINQ to SQL sorgusu yürütmeden önce, DataContext sınıfı aracılığıyla veri kaynağına bağlanmanın hayati önem taşıdığına dikkat edilmelidir.

LINQ To SQL kullanarak Ekleme, Güncelleme ve Silme

VEYA Ekle Ekle

C#

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);           

         //Create new Employee
		 
         Employee newEmployee = new Employee();
         newEmployee.Name = "Michael";
         newEmployee.Email = "[email protected]";
         newEmployee.ContactNo = "343434343";
         newEmployee.DepartmentId = 3;
         newEmployee.Address = "Michael - USA";

         //Add new Employee to database
         db.Employees.InsertOnSubmit(newEmployee);

         //Save changes to Database.
         db.SubmitChanges();

         //Get new Inserted Employee            
         Employee insertedEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("Michael"));

         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
                          insertedEmployee.EmployeeId, insertedEmployee.Name, insertedEmployee.Email, 
                          insertedEmployee.ContactNo, insertedEmployee.Address);

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim newEmployee As New Employee()
	  
      newEmployee.Name = "Michael"
      newEmployee.Email = "[email protected]"
      newEmployee.ContactNo = "343434343"
      newEmployee.DepartmentId = 3
      newEmployee.Address = "Michael - USA"
     
      db.Employees.InsertOnSubmit(newEmployee)
     
      db.SubmitChanges()
     
      Dim insertedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))

      Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, 
         Address = {4}", insertedEmployee.EmployeeId, insertedEmployee.Name,
         insertedEmployee.Email, insertedEmployee.ContactNo, insertedEmployee.Address)

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	 
   End Sub
  
End Module

Yukarıdaki C # veya VB kodu derlenip çalıştırıldığında, aşağıdaki sonucu verir -

Emplyee ID = 4, Name = Michael, Email = [email protected], ContactNo = 
343434343, Address = Michael - USA

Press any key to continue.

Güncelleme

C#

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = new LinqToSQLDataContext(connectString);

         //Get Employee for update
         Employee employee = db.Employees.FirstOrDefault(e =>e.Name.Equals("Michael"));

         employee.Name = "George Michael";
         employee.Email = "[email protected]";
         employee.ContactNo = "99999999";
         employee.DepartmentId = 2;
         employee.Address = "Michael George - UK";

         //Save changes to Database.
         db.SubmitChanges();

         //Get Updated Employee            
         Employee updatedEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("George Michael"));

         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}, Address = {4}",
                          updatedEmployee.EmployeeId, updatedEmployee.Name, updatedEmployee.Email, 
                          updatedEmployee.ContactNo, updatedEmployee.Address);

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
  
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim employee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("Michael"))

      employee.Name = "George Michael"
      employee.Email = "[email protected]"
      employee.ContactNo = "99999999"
      employee.DepartmentId = 2
      employee.Address = "Michael George - UK"

      db.SubmitChanges()
          
      Dim updatedEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))

      Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3},
         Address = {4}", updatedEmployee.EmployeeId, updatedEmployee.Name, 
         updatedEmployee.Email, updatedEmployee.ContactNo, updatedEmployee.Address)

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
   
End Module

Yukarıdaki C # veya Vb kodu derlenip çalıştırıldığında, aşağıdaki sonucu verir -

Emplyee ID = 4, Name = George Michael, Email = [email protected], ContactNo = 
999999999, Address = Michael George - UK

Press any key to continue.

Sil

C#

using System;
using System.Linq;

namespace LINQtoSQL {
   class LinqToSQLCRUD {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         LinqToSQLDataContext db = newLinqToSQLDataContext(connectString);

         //Get Employee to Delete
         Employee deleteEmployee = db.Employees.FirstOrDefault(e ⇒e.Name.Equals("George Michael"));

         //Delete Employee
         db.Employees.DeleteOnSubmit(deleteEmployee);

         //Save changes to Database.
         db.SubmitChanges();

         //Get All Employee from Database
         var employeeList = db.Employees;
         foreach (Employee employee in employeeList) {
            Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
               employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo);
         }            

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Module Module1

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim db As New LinqToSQLDataContext(connectString)

      Dim deleteEmployee As Employee = db.Employees.FirstOrDefault(Function(e) e.Name.Equals("George Michael"))

      db.Employees.DeleteOnSubmit(deleteEmployee)

      db.SubmitChanges()

      Dim employeeList = db.Employees
	  
      For Each employee As Employee In employeeList
         Console.WriteLine("Employee Id = {0} , Name = {1}, Email = {2}, ContactNo = {3}",
            employee.EmployeeId, employee.Name, employee.Email, employee.ContactNo)
      Next 

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
   End Sub
   
End Module

Yukarıdaki C # veya VB kodu derlenip çalıştırıldığında, aşağıdaki sonucu verir -

Emplyee ID = 1, Name = William, Email = [email protected], ContactNo = 999999999
Emplyee ID = 2, Name = Miley, Email = [email protected], ContactNo = 999999999
Emplyee ID = 3, Name = Benjamin, Email = [email protected], ContactNo = 

Press any key to continue.

LINQ to Objects, LINQ to SQL veya LINQ to XML durumunda olduğu gibi, LINQ sağlayıcısına (API) ihtiyaç duymadan bellek içi veri koleksiyonlarına erişmek için IEnumerable <T> 'yi destekleyen herhangi bir LINQ sorgusunun kullanımını sunar.

LINQ to Objects'e Giriş

LINQ to Objects'teki sorgular, genellikle yalnızca IEnumerable <T> türündeki değişkenleri döndürür. Kısacası, LINQ to Objects, daha önce olduğu gibi koleksiyonlara yeni bir yaklaşım sunuyor, artık istenen verileri açıkça tanımlayan bildirimsel kod yazmakla değiştirilen bir koleksiyondan verilerin alınması için uzun kodlama (çok karmaşık olan her döngü) yazmak hayati önem taşıyordu. almak için gerekli.

LINQ to Objects'in geleneksel foreach döngülerine göre daha fazla okunabilirlik, güçlü filtreleme, gruplama yeteneği, minimum uygulama kodlamasıyla gelişmiş sıralama gibi birçok avantajı da vardır. Bu tür LINQ sorguları, doğaları gereği daha derli topludur ve herhangi bir başka veri kaynağına herhangi bir değişiklik yapılmadan veya yalnızca küçük bir değişiklik yapılarak taşınabilir.

Aşağıda basit bir LINQ to Objects örneği verilmiştir -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQtoObjects {
   class Program {
      static void Main(string[] args) {
      
         string[] tools = { "Tablesaw", "Bandsaw", "Planer", "Jointer", "Drill", "Sander" };
         var list = from t in tools select t;

         StringBuilder sb = new StringBuilder();

         foreach (string s in list) {
            sb.Append(s + Environment.NewLine);
         }
		 
         Console.WriteLine(sb.ToString(), "Tools");
         Console.ReadLine();
      }
   }
}

Örnekte, LINQ to Objects kullanılarak sorgulanacak nesnelerin koleksiyonu olarak bir dizi (araçlar) kullanılır.

Objects query is:
var list = from t in tools select t;

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Tablesaw
Bandsaw
Planer
Jointer
Drill
Sander

LINQ to Objects Kullanarak Bellek Koleksiyonlarında Sorgulama

C #

using System;
using System.Collections.Generic;
using System.Linq;

namespace LINQtoObjects {
   class Department {
      public int DepartmentId { get; set; }
      public string Name { get; set; }
   }

   class LinqToObjects {
      static void Main(string[] args) {
      
         List<Department> departments = new List<Department>();
			
         departments.Add(new Department { DepartmentId = 1, Name = "Account" });
         departments.Add(new Department { DepartmentId = 2, Name = "Sales" });
         departments.Add(new Department { DepartmentId = 3, Name = "Marketing" });

         var departmentList = from d in departments
                              select d;

         foreach (var dept in departmentList) {
            Console.WriteLine("Department Id = {0} , Department Name = {1}",
               dept.DepartmentId, dept.Name);
         }
		 
         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Collections.Generic
Imports System.Linq

Module Module1

   Sub Main(ByVal args As String())

      Dim account As New Department With {.Name = "Account", .DepartmentId = 1}
      Dim sales As New Department With {.Name = "Sales", .DepartmentId = 2}
      Dim marketing As New Department With {.Name = "Marketing", .DepartmentId = 3}

      Dim departments As New System.Collections.Generic.List(Of Department)(New Department() {account, sales, marketing})

      Dim departmentList = From d In departments

      For Each dept In departmentList
         Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
   End Sub

   Class Department
      Public Property Name As String
      Public Property DepartmentId As Integer
   End Class
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Department Id = 1, Department Name = Account
Department Id = 2, Department Name = Sales
Department Id = 3, Department Name = Marketing

Press any key to continue.

Bir Veri Kümesi, bellekte son derece yararlı bir veri sunumu sunar ve çok çeşitli veri tabanlı uygulamalar için kullanılır. LINQ to ADO.NET'in teknolojisinden biri olan LINQ to Dataset, bir Veri Kümesinin verileri üzerinde sorunsuz bir şekilde sorgu gerçekleştirmeyi kolaylaştırır ve üretkenliği artırır.

LINQ To Veri Kümesine Giriş

LINQ to Dataset, geliştiriciler için sorgulama görevini basitleştirdi. Sorguları belirli bir sorgu dilinde yazmaları gerekmez, bunun yerine aynısı programlama dilinde de yazılabilir. LINQ to Dataset, verilerin birden çok veri kaynağından birleştirildiği durumlarda sorgulama için de kullanılabilir. Bu ayrıca, bellek koleksiyonlarından verilere erişmek için LINQ to SQL ve LINQ to XML gibi herhangi bir LINQ sağlayıcısına ihtiyaç duymaz.

Aşağıda, bir veri kaynağının önce elde edildiği ve ardından veri kümesinin iki veri tablosu ile doldurulduğu LINQ to Dataset sorgusunun basit bir örneği verilmiştir. Her iki tablo arasında bir ilişki kurulur ve birleştirme cümlesiyle her iki tabloya karşı bir LINQ sorgusu oluşturulur. Son olarak, istenen sonuçları görüntülemek için foreach döngüsü kullanılır.

C #

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LINQtoDataset {
   class Program {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         string sqlSelect = "SELECT * FROM Department;" + "SELECT * FROM Employee;";

         // Create the data adapter to retrieve data from the database
         SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);
        
         // Create table mappings
         da.TableMappings.Add("Table", "Department");
         da.TableMappings.Add("Table1", "Employee");

         // Create and fill the DataSet
         DataSet ds = new DataSet();
         da.Fill(ds);

         DataRelation dr = ds.Relations.Add("FK_Employee_Department",
                           ds.Tables["Department"].Columns["DepartmentId"],
                           ds.Tables["Employee"].Columns["DepartmentId"]);

         DataTable department = ds.Tables["Department"];
         DataTable employee = ds.Tables["Employee"];

         var query = from d in department.AsEnumerable()
                     join e in employee.AsEnumerable()
                     on d.Field<int>("DepartmentId") equals
                     e.Field<int>("DepartmentId")                        
                     select new {
                        EmployeeId = e.Field<int>("EmployeeId"),
                        Name = e.Field<string>("Name"),                            
                        DepartmentId = d.Field<int>("DepartmentId"),                            
                        DepartmentName = d.Field<string>("Name")
                     };

         foreach (var q in query) {
            Console.WriteLine("Employee Id = {0} , Name = {1} , Department Name = {2}",
               q.EmployeeId, q.Name, q.DepartmentName);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Data.SqlClient
Imports System.Linq

Module LinqToDataSet

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim sqlSelect As String = "SELECT * FROM Department;" + "SELECT * FROM Employee;"
      Dim sqlCnn As SqlConnection = New SqlConnection(connectString)
      sqlCnn.Open()

      Dim da As New SqlDataAdapter
      da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn)

      da.TableMappings.Add("Table", "Department")
      da.TableMappings.Add("Table1", "Employee")

      Dim ds As New DataSet()
      da.Fill(ds)

      Dim dr As DataRelation = ds.Relations.Add("FK_Employee_Department", ds.Tables("Department").Columns("DepartmentId"), ds.Tables("Employee").Columns("DepartmentId"))

      Dim department As DataTable = ds.Tables("Department")
      Dim employee As DataTable = ds.Tables("Employee")

      Dim query = From d In department.AsEnumerable()
                  Join e In employee.AsEnumerable() On d.Field(Of Integer)("DepartmentId") Equals
                  e.Field(Of Integer)("DepartmentId")
                  Select New Person With { _
                        .EmployeeId = e.Field(Of Integer)("EmployeeId"),
                        .EmployeeName = e.Field(Of String)("Name"),
                        .DepartmentId = d.Field(Of Integer)("DepartmentId"),
                        .DepartmentName = d.Field(Of String)("Name")
                  }

      For Each e In query
         Console.WriteLine("Employee Id = {0} , Name = {1} , Department Name = {2}", e.EmployeeId, e.EmployeeName, e.DepartmentName)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
  
   Class Person
      Public Property EmployeeId As Integer
      Public Property EmployeeName As String
      Public Property DepartmentId As Integer
      Public Property DepartmentName As String
   End Class
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Employee Id = 1, Name = William, Department Name = Account
Employee Id = 2, Name = Benjamin, Department Name = Account
Employee Id = 3, Name = Miley, Department Name = Sales

Press any key to continue.

LinQ to Dataset kullanarak Veri Kümesini Sorgulama

LINQ to Dataset kullanarak bir Veri Kümesini sorgulamaya başlamadan önce, bir Veri Kümesine veri yüklemek çok önemlidir ve bu, DataAdapter sınıfı kullanılarak veya LINQ to SQL ile yapılır. LINQ to Dataset kullanılarak sorguların formüle edilmesi, LINQ'nun diğer LINQ etkin veri kaynaklarının yanında kullanılmasıyla sorguları formüle etmeye oldukça benzer.

Tek Tabloda Sorgu

Aşağıdaki tek tablo sorgusunda, tüm çevrimiçi siparişler SalesOrderHeaderTtable'dan toplanır ve ardından çıktı olarak sipariş kimliği, Sipariş tarihi ve sipariş numarası görüntülenir.

C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqToDataset {
   class SingleTable {
      static void Main(string[] args) {
      
         string connectString = System.Configuration.ConfigurationManager.ConnectionStrings["LinqToSQLDBConnectionString"].ToString();

         string sqlSelect = "SELECT * FROM Department;";

         // Create the data adapter to retrieve data from the database
         SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);

         // Create table mappings
         da.TableMappings.Add("Table", "Department");           

         // Create and fill the DataSet
         DataSet ds = new DataSet();
         da.Fill(ds);

         DataTable department = ds.Tables["Department"];            

         var query = from d in department.AsEnumerable()                        
         select new {
            DepartmentId = d.Field<int>("DepartmentId"),
            DepartmentName = d.Field<string>("Name")
         };

         foreach (var q in query) {
            Console.WriteLine("Department Id = {0} , Name = {1}",
               q.DepartmentId, q.DepartmentName);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Data.SqlClient
Imports System.Linq

Module LinqToDataSet

   Sub Main()
   
      Dim connectString As String = System.Configuration.ConfigurationManager.ConnectionStrings("LinqToSQLDBConnectionString").ToString()

      Dim sqlSelect As String = "SELECT * FROM Department;"
      Dim sqlCnn As SqlConnection = New SqlConnection(connectString)
      sqlCnn.Open()

      Dim da As New SqlDataAdapter
      da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn)

      da.TableMappings.Add("Table", "Department")
      Dim ds As New DataSet()
      da.Fill(ds)

      Dim department As DataTable = ds.Tables("Department")

      Dim query = From d In department.AsEnumerable()
      Select New DepartmentDetail With {
         .DepartmentId = d.Field(Of Integer)("DepartmentId"),
            .DepartmentName = d.Field(Of String)("Name")
      }

      For Each e In query
         Console.WriteLine("Department Id = {0} , Name = {1}", e.DepartmentId, e.DepartmentName)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
   End Sub

   Public Class DepartmentDetail
      Public Property DepartmentId As Integer
      Public Property DepartmentName As String
   End Class
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Department Id = 1, Name = Account
Department Id = 2, Name = Sales
Department Id = 3, Name = Pre-Sales
Department Id = 4, Name = Marketing

Press any key to continue.

LINQ to XML, standart sorgu operatörleri, programlama arabirimi vb. Gibi tüm LINQ işlevlerine kolay erişim sağlar. .NET çerçevesine entegre olan LINQ to XML, hata ayıklama, derleme zamanı denetimi, güçlü yazım gibi .NET çerçeve işlevlerinden en iyi şekilde faydalanır. ve söylenecek çok şey var.

LINQ to XML'e Giriş

LINQ to XML kullanırken, XML belgelerini belleğe yüklemek kolaydır ve daha kolay, sorgulama ve belge değişikliği yapmaktır. Hafızada bulunan XML belgelerini diske kaydetmek ve serileştirmek de mümkündür. Bir geliştiricinin, biraz karmaşık olan XML sorgu dilini öğrenme ihtiyacını ortadan kaldırır.

LINQ to XML'in gücü System.Xml.Linq ad alanında bulunur. Bu, XML ile çalışmak için gerekli tüm 19 sınıfa sahiptir. Bu sınıflar aşağıdaki sınıflardır.

  • XAttribute
  • XCData
  • XComment
  • XContainer
  • XDeclaration
  • XDocument
  • XDocumentType
  • XElement
  • XName
  • XNamespace
  • XNode
  • XNodeDocumentOrderComparer
  • XNodeEqualityComparer
  • XObject
  • XObjectChange
  • XObjectChangeEventArgs
  • XObjectEventHandler
  • XProcessingInstruction
  • XText

LINQ kullanarak bir XML Dosyası okuyun

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace LINQtoXML {
   class ExampleOfXML {
      static void Main(string[] args) {
      
         string myXML = @"<Departments>
                       <Department>Account</Department>
                       <Department>Sales</Department>
                       <Department>Pre-Sales</Department>
                       <Department>Marketing</Department>
                       </Departments>";

         XDocument xdoc = new XDocument();
         xdoc = XDocument.Parse(myXML);

         var result = xdoc.Element("Departments").Descendants();

         foreach (XElement item in result) {
            Console.WriteLine("Department Name - " + item.Value);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq

Module Module1

   Sub Main(ByVal args As String())
   
      Dim myXML As String = "<Departments>" & vbCr & vbLf & 
                           "<Department>Account</Department>" & vbCr & vbLf & 
                           "<Department>Sales</Department>" & vbCr & vbLf & 
                           "<Department>Pre-Sales</Department>" & vbCr & vbLf & 
                           "<Department>Marketing</Department>" & vbCr & vbLf & 
                           "</Departments>"

      Dim xdoc As New XDocument()
      xdoc = XDocument.Parse(myXML)

      Dim result = xdoc.Element("Departments").Descendants()

      For Each item As XElement In result
         Console.WriteLine("Department Name - " + item.Value)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Department Name - Account
Department Name - Sales
Department Name - Pre-Sales
Department Name - Marketing

Press any key to continue.

Yeni Düğüm Ekle

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace LINQtoXML {
   class ExampleOfXML {
      static void Main(string[] args) {
      
         string myXML = @"<Departments>
                       <Department>Account</Department>
                       <Department>Sales</Department>
                       <Department>Pre-Sales</Department>
                       <Department>Marketing</Department>
                       </Departments>";

         XDocument xdoc = new XDocument();
         xdoc = XDocument.Parse(myXML);

         //Add new Element
         xdoc.Element("Departments").Add(new XElement("Department", "Finance"));

         //Add new Element at First
         xdoc.Element("Departments").AddFirst(new XElement("Department", "Support"));

         var result = xdoc.Element("Departments").Descendants();

         foreach (XElement item in result) {
            Console.WriteLine("Department Name - " + item.Value);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq

Module Module1

   Sub Main(ByVal args As String())
   
      Dim myXML As String = "<Departments>" & vbCr & vbLf & 
     	                   "<Department>Account</Department>" & vbCr & vbLf & 
     	                   "<Department>Sales</Department>" & vbCr & vbLf & 
     	                   "<Department>Pre-Sales</Department>" & vbCr & vbLf & 
     	                   "<Department>Marketing</Department>" & vbCr & vbLf & 
     	                   "</Departments>"

      Dim xdoc As New XDocument()
      xdoc = XDocument.Parse(myXML)

      xdoc.Element("Departments").Add(New XElement("Department", "Finance"))
     
      xdoc.Element("Departments").AddFirst(New XElement("Department", "Support"))

      Dim result = xdoc.Element("Departments").Descendants()

      For Each item As XElement In result
         Console.WriteLine("Department Name - " + item.Value)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Department Name - Support
Department Name - Account
Department Name - Sales
Department Name - Pre-Sales
Department Name - Marketing
Department Name - Finance

Press any key to continue.

Belirli Düğümü Silme

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace LINQtoXML {
   class ExampleOfXML {
      static void Main(string[] args) {
      
         string myXML = @"<Departments>
                       <Department>Support</Department>
                       <Department>Account</Department>
                       <Department>Sales</Department>
                       <Department>Pre-Sales</Department>
                       <Department>Marketing</Department>
                       <Department>Finance</Department>
                       </Departments>";

         XDocument xdoc = new XDocument();
         xdoc = XDocument.Parse(myXML);

         //Remove Sales Department
         xdoc.Descendants().Where(s =>s.Value == "Sales").Remove(); 

         var result = xdoc.Element("Departments").Descendants();

         foreach (XElement item in result) {
            Console.WriteLine("Department Name - " + item.Value);
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

VB

Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq

Module Module1

   Sub Main(args As String())
   
      Dim myXML As String = "<Departments>" & vbCr & vbLf & 
     	                   "<Department>Support</Department>" & vbCr & vbLf & 
     	                   "<Department>Account</Department>" & vbCr & vbLf & 
     	                   "<Department>Sales</Department>" & vbCr & vbLf & 
     	                   "<Department>Pre-Sales</Department>" & vbCr & vbLf & 
     	                   "<Department>Marketing</Department>" & vbCr & vbLf & 
     	                   "<Department>Finance</Department>" & vbCr & vbLf & 
                           "</Departments>"

      Dim xdoc As New XDocument()
      xdoc = XDocument.Parse(myXML)
     
      xdoc.Descendants().Where(Function(s) s.Value = "Sales").Remove()

      Dim result = xdoc.Element("Departments").Descendants()

      For Each item As XElement In result
         Console.WriteLine("Department Name - " + item.Value)
      Next

      Console.WriteLine(vbLf & "Press any key to continue.")
      Console.ReadKey()
	  
   End Sub
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Department Name - Support
Department Name - Account
Department Name - Pre-Sales
Department Name - Marketing
Department Name - Finance

Press any key to continue.

ADO.NET Entity Framework'ün bir parçası olan LINQ to Entities, LINQ to SQL'den daha esnektir, ancak karmaşıklığı ve anahtar özelliklerin bulunmaması nedeniyle pek popüler değildir. Ancak, LINQ to Entities, Oracle, MySQL, vb. Gibi çok sayıda veri sağlayıcıda veri sorgusunu kolaylaştırdığından, yalnızca SQL sunucu veritabanında veri sorgusuna izin veren LINQ to SQL sınırlamalarına sahip değildir.

Ayrıca, kullanıcıların LINQ aracılığıyla Varlıklara bir sorgu yürütmek için bir veri kaynağı kontrolünden yararlanabilmesi ve ek kodlamaya gerek kalmadan sonuçların bağlanmasını kolaylaştırması anlamında ASP.Net'ten büyük bir destek almıştır.

LINQ to Entities, günümüzde veritabanlarında LINQ kullanımı için bu avantajlar için standart mekanizma haline gelmiştir. LINQ to Entities ile sorgulanan veri ayrıntılarını değiştirmek ve kolayca bir toplu güncelleme gerçekleştirmek de mümkündür. LINQ to Entities ile ilgili en ilgi çekici gerçek, SQL ile aynı sözdizimine sahip olması ve hatta Join, Select, OrderBy, vb. Gibi aynı standart sorgu operatörleri grubuna sahip olmasıdır.

LINQ to Entities Sorgu Oluşturma ve Yürütme Süreci

  • İnşaatı ObjectQuery bir örnek ObjectContext (Varlık Bağlantısı)

  • Yeni oluşturulan örneği kullanarak C # veya Visual Basic (VB) 'de bir sorgu oluşturma

  • LINQ standart sorgu operatörlerinin yanı sıra LINQ ifadelerinin komut ağaçlarına dönüştürülmesi

  • Karşılaşılan istisnaları doğrudan istemciye ileten sorguyu yürütme

  • Müşteriye tüm sorgu sonuçlarını döndürmek

ObjectContext burada, etkileşim sağlayan birincil sınıf Entity Data Modelveya başka bir deyişle, LINQ'yu veritabanına bağlayan bir köprü görevi görür. Komut ağaçları, burada Entity çerçevesiyle uyumlulukla birlikte sorgu temsilidir.

Öte yandan Entity Framework, aslında Object Relational MapperVeritabanı tablolarına göre iş nesnelerinin ve varlıkların oluşturulmasını yapan ve oluşturma, güncelleme, silme ve okuma gibi çeşitli temel işlemleri kolaylaştıran geliştiriciler tarafından genel olarak ORM olarak kısaltılır. Aşağıdaki çizim, varlık çerçevesini ve bileşenlerini gösterir.

Varlık Modeli ile LINQ kullanarak EKLEME, GÜNCELLEME ve SİLME örneği

Öncelikle aşağıdaki adımları izleyerek Varlık Modeli ekleyin.

Step 1- Projeye sağ tıklayın ve yeni öğe ekle'ye tıklayın, aşağıdaki gibi pencere açılacaktır. ADO.NET Varlık Veri Modeli'ni seçin ve adı belirtin ve Ekle'ye tıklayın.

Step 2 - Seçin Generate from database.

Step 3 - Açılır menüden Veritabanı Bağlantısı'nı seçin.

Step 4 - Tüm masaları seçin.

Şimdi aşağıdaki kodu yazın.

using DataAccess;
using System;
using System.Linq;

namespace LINQTOSQLConsoleApp {
   public class LinqToEntityModel {
      static void Main(string[] args) {

         using (LinqToSQLDBEntities context = new LinqToSQLDBEntities()) {
            //Get the List of Departments from Database
            var departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }

            //Add new Department
            DataAccess.Department department = new DataAccess.Department();
            department.Name = "Support";

            context.Departments.Add(department);
            context.SaveChanges();

            Console.WriteLine("Department Name = Support is inserted in Database");

            //Update existing Department
            DataAccess.Department updateDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 1);
            updateDepartment.Name = "Account updated";
            context.SaveChanges();

            Console.WriteLine("Department Name = Account is updated in Database");

            //Delete existing Department
            DataAccess.Department deleteDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 3);
            context.Departments.Remove(deleteDepartment);
            context.SaveChanges();

            Console.WriteLine("Department Name = Pre-Sales is deleted in Database");

            //Get the Updated List of Departments from Database
            departmentList = from d in context.Departments
            select d;

            foreach (var dept in departmentList) {
               Console.WriteLine("Department Id = {0} , Department Name = {1}",
                  dept.DepartmentId, dept.Name);
            }
         }

         Console.WriteLine("\nPress any key to continue.");
         Console.ReadKey();
      }
   }
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

"Lambda ifadesi" terimi, adını, işlevleri tanımlamak için uygulanan matematiksel bir gösterim olan "lambda" hesaplamasından almıştır. LINQ denkleminin çalıştırılabilir parçası olarak Lambda ifadeleri, mantığı çalışma zamanında bir şekilde çevirir, böylece veri kaynağına rahatça geçebilir. Ancak, lambda ifadeleri yalnızca LINQ'da uygulama bulmakla sınırlı değildir.

Bu ifadeler aşağıdaki sözdizimi ile ifade edilir -

(Input parameters) ⇒ Expression or statement block

İşte bir lambda ifadesi örneği -

y ⇒ y * y

Yukarıdaki ifade, y adlı bir parametreyi belirtir ve bu y değerinin karesi alınır. Ancak, bu formda bir lambda ifadesinin çalıştırılması mümkün değildir. C # 'da bir lambda ifadesi örneği aşağıda gösterilmiştir.

C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lambdaexample {
   class Program {

      delegate int del(int i);
      static void Main(string[] args) {

         del myDelegate = y ⇒ y * y;
         int j = myDelegate(5);
         Console.WriteLine(j);
         Console.ReadLine();
      }
   }
}

VB

Module Module1
   Private Delegate Function del(ByVal i As Integer) As Integer
   
   Sub Main(ByVal args As String())
   
      Dim myDelegate As del = Function(y) y * y
      Dim j As Integer = myDelegate(5)
      Console.WriteLine(j)
      Console.ReadLine()
	  
   End Sub
   
End Module

Yukarıdaki C # veya VB kodu derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

25

İfade Lambda

Yukarıda gösterilen lambda ifadesinin söz dizimindeki ifade sağ tarafta olduğundan, bunlar aynı zamanda lambda ifadesi olarak da bilinir.

Eşzamansız Lambdalar

Eşzamansız anahtar sözcüğün kullanımıyla eşzamansız işlemleri birleştirerek oluşturulan lambda ifadesi, eşzamansız lambdalar olarak bilinir. Aşağıda bir eşzamansız lambda örneği verilmiştir.

Func<Task<string>> getWordAsync = async()⇒ “hello”;

Standart Sorgu Operatörlerinde Lambda

Sorgu işleci içindeki bir lambda ifadesi, talep üzerine aynı şekilde değerlendirilir ve sürekli olarak tüm dizide değil, giriş sırasındaki öğelerin her birinde çalışır. Lambda ifadesi, geliştiricilerin kendi mantığını standart sorgu operatörlerine aktarmasına izin verir. Aşağıdaki örnekte, geliştirici bir lambda ifadesi kullanarak verilen listedeki tek değerleri geri almak için 'Where' operatörünü kullanmıştır.

C #

//Get the average of the odd Fibonacci numbers in the series... 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lambdaexample {
   class Program {     
      static void Main(string[] args) {
      
         int[] fibNum = { 1, 1, 2, 3, 5, 8, 13, 21, 34 };
         double averageValue = fibNum.Where(num ⇒ num % 2 == 1).Average();
         Console.WriteLine(averageValue);
         Console.ReadLine();
      }
   }
}

VB

Module Module1

   Sub Main()
   
      Dim fibNum As Integer() = {1, 1, 2, 3, 5, 8, 13, 21, 34}
      Dim averageValue As Double = fibNum.Where(Function(num) num Mod 2 = 1).Average()
	  
      Console.WriteLine(averageValue)
      Console.ReadLine()
	  
   End Sub
   
End Module

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

7.33333333333333

Lambda'da Tip Çıkarımı

C # 'da tür çıkarımı, çeşitli durumlarda ve türleri açıkça belirtmeden rahatlıkla kullanılır. Bununla birlikte, bir lambda ifadesi olması durumunda, tür çıkarımı yalnızca her tür belirtildiğinde çalışacaktır, çünkü derleyicinin karşılanması gerekir. Aşağıdaki örneği ele alalım.

delegate int Transformer (int i);

Burada derleyici, x'in bir tamsayı olduğu gerçeğinden yararlanmak için tür çıkarımını kullanır ve bu, Transformer'in parametre türünü inceleyerek yapılır.

Lambda İfadesinde Değişken Kapsam

Bir lambda ifadesinde değişken kapsamını kullanırken, bir lambda ifadesi içinde başlatılan değişkenlerin bir dış yöntemde görünmesi amaçlanmaması gibi bazı kurallar vardır. Ayrıca, aynı değere başvuran temsilci çöp toplama eylemi için uygun hale gelmedikçe, yakalanan bir değişkenin çöp olarak toplanmayacağına dair bir kural vardır. Dahası, bir lambda ifadesi içinde, çevreleyen bir yöntemin geri dönüşüne neden olacak bir dönüş ifadesini yasaklayan bir kural vardır.

Lambda ifadesinde değişken kapsamını gösteren bir örnek aşağıda verilmiştir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lambdaexample {
   class Program {
      delegate bool D();
      delegate bool D2(int i);

      class Test {
         D del;
         D2 del2;
			
         public void TestMethod(int input) {
            int j = 0;
            // Initialize the delegates with lambda expressions.
            // Note access to 2 outer variables.
            // del will be invoked within this method.
            del = () ⇒ { j = 10; return j > input; };

            // del2 will be invoked after TestMethod goes out of scope.
            del2 = (x) ⇒ { return x == j; };

            // Demonstrate value of j:            
            // The delegate has not been invoked yet.
            Console.WriteLine("j = {0}", j);        // Invoke the delegate.
            bool boolResult = del();
           
            Console.WriteLine("j = {0}. b = {1}", j, boolResult);
         }

         static void Main() {
            Test test = new Test();
            test.TestMethod(5);

            // Prove that del2 still has a copy of
            // local variable j from TestMethod.
            bool result = test.del2(10);
           
            Console.WriteLine(result);

            Console.ReadKey();
         }
      }
   }
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

j = 0
j = 10. b = True
True

İfade Ağacı

Lambda ifadeleri kullanılır Expression Treeinşaat kapsamlı. Bir ifade ağacı, her düğümün kendisinin bir yöntem çağrısı gibi bir ifade olduğu veya x <y gibi bir ikili işlem olabileceği bir ağaca benzeyen bir veri yapısında kod verir. Aşağıda, bir ifade ağacı oluşturmak için lambda ifadesinin kullanımına bir örnek verilmiştir.

Lambda Bildirimi

Ayrıca birde şu var statement lambdasiki veya üç ifadeden oluşan ancak ifade ağaçlarının yapımında kullanılmaz. Bir dönüş ifadesi, lambda ifadesinde yazılmalıdır.

Lambda ifadesinin sözdizimi

(params)⇒ {statements}

Lambda ifadesi örneği

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace lambdaexample {
   class Program {
      static void Main(string[] args) {
         int[] source = new[] { 3, 8, 4, 6, 1, 7, 9, 2, 4, 8 };

         foreach (int i in source.Where(x ⇒ 
            {
               if (x <= 3)
                  return true;
               else if (x >= 7)
                  return true;
               return false;
            }
         ))
        Console.WriteLine(i);
        Console.ReadLine();
      }
   }
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

3
8
1
7
9
2
8

Lambdalar, yöntemlere dayalı LINQ sorgularında bağımsız değişkenler olarak kullanılır ve hiçbir zaman operatörlerin sol tarafında aşağıdaki gibi bir yere sahip olmasına izin verilmez. is veya astıpkı anonim yöntemler gibi. Lambda ifadeleri anonim yöntemlere çok benzese de, bunlar hiçbir şekilde yalnızca temsilci olarak kullanılmakla sınırlı değildir.

Lambda ifadelerini kullanırken hatırlanması gereken noktalar

  • Bir lambda ifadesi bir değer döndürebilir ve parametreleri olabilir.

  • Parametreler, bir lambda ifadesiyle sayısız yolla tanımlanabilir.

  • Bir lambda ifadesinde tek bir ifade varsa, küme parantezlerine gerek yoktur, ancak birden çok ifade varsa, küme parantezlerinin yanı sıra dönüş değeri de yazmak için gereklidir.

  • Lambda ifadeleriyle, lambda ifade bloğunun dışında bulunan değişkenlere kapanış olarak bilinen bir özellik ile erişmek mümkündür. Herhangi bir problem yaşanmaması için kapama işlemi dikkatli yapılmalıdır.

  • Herhangi bir lambda ifadesi içinde güvenli olmayan herhangi bir kod çalıştırmak imkansızdır.

  • Lambda ifadelerinin operatörün sol tarafında kullanılması amaçlanmamıştır.

NET çerçeve uzantıları kümesi olarak LINQ, ASP.NET geliştiricileri tarafından veri erişimi için tercih edilen mekanizmadır. ASP.NET 3.5, LINQ'nun ASP.NET'te kolayca kullanılmasını sağlayan yerleşik bir LINQDataSource denetimine sahiptir. ASP.NET, yukarıda belirtilen denetimi bir veri kaynağı olarak kullanır. Gerçek hayat projeleri çoğunlukla web sitelerini veya Windows uygulamalarını kapsar ve bu nedenle, ASP.NET ile LINQ kavramını daha iyi anlamak için LINQ özelliklerinden yararlanan bir ASP.NET web sitesi oluşturarak başlayalım.

Bunun için sisteminize Visual Studio ve .NET çerçevesini kurmanız önemlidir. Visual Studio'yu açtıktan sonra, Dosya → Yeni → Web Sitesi'ne gidin. Aşağıdaki şekilde gösterildiği gibi bir açılır pencere açılacaktır.

Şimdi, sol taraftaki şablonların altında, web sitesini oluşturmak için iki dil seçeneği olacak. SeçVisual C# ve seçin ASP.NET Empty Web Site.

Yeni web sitesini sisteminize kaydetmek istediğiniz klasörü seçin. ArdındanOK ve bunun gibi Solution Explorertüm web dosyalarını içeren ekranınızda görünür. Çözüm Gezgini'nde Default.aspx'e sağ tıklayın ve tarayıcıda varsayılan ASP.NET web sitesini görüntülemek için Tarayıcıda Görüntüle'yi seçin. Yakında yeni ASP.NET web siteniz, aşağıdaki ekran görüntüsünde gösterildiği gibi web tarayıcısında açılacaktır.

.aspx aslında ASP.NET web sitelerinde kullanılan ana dosya uzantısıdır. Visual Studio varsayılan olarak temel bir web sitesi için gerekli tüm sayfaları oluşturur.Home page ve About Usİçeriğinizi rahatça yerleştirebileceğiniz sayfa. Web sitesinin kodu burada otomatik olarak oluşturulur ve görüntülenebilir.

LINQDataSource Denetimi

Bu mümkün UPDATE, INSERT ve DELETELINQDataSource denetimi yardımıyla ASP.NET web sitesinin sayfalarındaki veriler. LINQDataSource denetimi bu tür işlemler için dinamik olarak oluşturulan komutları kullandığından, SQL komutlarının belirtilmesine kesinlikle gerek yoktur.

Denetim, bir kullanıcının biçimlendirme metnindeki özellik ayarı ile bir ASP.NET web sayfasında LINQ'dan rahatlıkla yararlanmasını sağlar. LINQDataSource, aşağıdaki gibi kontrollere çok benzer:SqlDataSource Hem de ObjectDataSourcebir sayfada bulunan diğer ASP.NET denetimlerini bir veri kaynağına bağlamada kullanılabileceği için. Yani, sahip olmalıyızdatabase LINQDataSource Denetimi tarafından çağrılan çeşitli işlevleri açıklamak için.

ASP.NET web sayfası formunda kontrol kullanımının açıklamasına başlamadan önce, Microsoft Visual Studio Toolbox'ı açmak ve LINQDataSource kontrolünü aşağıdaki şekilde olduğu gibi ASP.NET web sitesinin .aspx sayfasına sürükleyip bırakmak önemlidir.

Sonraki adım, çalışan kaydı için tüm sütunları seçerek LINQDataSource'u yapılandırmaktır.

Şimdi .aspx sayfasına bir GridView Kontrolü ekleyin ve aşağıdaki şekilde gösterildiği gibi yapılandırın. GridView kontrolü güçlüdür ve verilerle çalışma esnekliği sunar. Kontrolü yapılandırdıktan kısa bir süre sonra tarayıcıda görünecektir.

.Aspx sayfası için şimdi ekranınızda görüntülenebilecek kodlama -

<!DOCTYPE html>

<html>
   <head runat = "server">
      <title></title>
   </head>

   <body>
      <form id = "form1" runat = "server">
         <div>
            <asp:GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "False"
			
               DataKeyNames = "ContactID" DataSourceID = "LINQDataSource1">
               <Columns>
			   
                  <asp:BoundField DataField = "ContactID" HeaderText = "ContactID"
                     InsertVisible = "False" ReadOnly="True" SortExpression = "ContactID" />
                  <asp:CheckBoxField DataField = "NameStyle" HeaderText = "NameStyle"
                     SortExpression = "NameStyle" />
                  <asp:BoundField DataField = "Title" HeaderText = "Title" SortExpression = "Title" />
                  <asp:BoundField DataField = "FirstName" HeaderText = "FirstName"
                     SortExpression="FirstName" />
                  <asp:BoundField DataField = "MiddleName" HeaderText = "MiddleName"
                     SortExpression = "MiddleName" />
                  <asp:BoundField DataField = "LastName" HeaderText = "LastName"
                     SortExpression = "LastName" />
                  <asp:BoundField DataField = "Suffix" HeaderText = "Suffix"
                     SortExpression = "Suffix" />
                  <asp:BoundField DataField = "EmailAddress" HeaderText = "EmailAddress"
                     SortExpression = "EmailAddress" />
               </Columns>

            </asp:GridView>

            <br />

         </div>

         <asp:LINQDataSource ID = "LINQDataSource1" runat = "server"

            ContextTypeName = "LINQWebApp1.AdventureWorksDataContext" EntityTypeName = ""
               TableName = "Contacts">

         </asp:LINQDataSource>
      </form>
   </body>
</html>

Burada, ContextTypeName özelliğini veritabanını temsil eden sınıfın özelliğine ayarlamanın hayati önem taşıdığına dikkat edilmelidir. Örneğin, burada LINQWebApp1.AdventureWorksDataContext olarak verilmiştir, çünkü bu eylem LINQDataSource ile veritabanı arasında gerekli bağlantıyı sağlayacaktır.

LINQ kullanarak ASP.NET Sayfasında verileri INSERT, UPDATE ve DELETE

Yukarıdaki tüm adımları titizlikle tamamladıktan sonra, LINQDataSource Tasks -den LINQDataSource Control ve aşağıdaki ekran görüntüsünde gösterildiği gibi, eklemeyi etkinleştirmek, güncellemeyi etkinleştirmek ve silmeyi etkinleştirmek için üç kutuyu da seçin.

Yakında bildirim temelli işaretleme aşağıdaki gibi ekranınızda görüntülenecektir.

<asp:LINQDataSource 
   ContextTypeName = "LINQWebApp1.AdventureWorksDataContext" 
   TableName = "Contacts" 
   EnableUpdate = "true" 
   EnableInsert = "true" 
   EnableDelete = "true" 
   ID = "LINQDataSource1" 
   runat = "server">
</asp:LINQDataSource>

Artık birden çok satır ve sütun olduğundan, kılavuzun yalnızca seçili satırının ayrıntılarını görüntülemek için .aspx formunuza Ayrıntı Görünümü veya Ana denetim olarak adlandırılan Kılavuz Görünümü denetiminin altına başka bir denetim eklemek daha iyidir. Detay Görünümü kontrolünden Detay Görünümü Görevlerini seçin ve aşağıda gösterildiği gibi onay kutularını seçin.

Şimdi, sadece değişiklikleri kaydedin ve Ctrl + F5 tuşlarına basarak sayfayı artık silmenin, güncellemenin ve ayrıntı görünümü denetiminde herhangi bir kaydı eklemenin mümkün olduğu tarayıcınızda görüntüleyin.