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.File → Save 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.File → Save 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.