LINQ (Language Integrated Query) Yrd. Doç. Dr. Mustafa Cem Kasapbaşı Her yönüyle C# 9. baskı Sefer Algan Pro C# 2008 and the.NET 3.5 Platform Fourth Edition Andrew Troelsen
Introduction to LINQ The Purpose Why Linq Verilerle yapılan işlemleri daha etkili kılmak Veri kaynakları : List objeleri XML objeleri Sql Why Linq Kod içinde gömülü sorgu olmakta. Hataları anacak çalışma zamanında belli olmaktadır. Parametrelerde veri tipi ancak çalışma anında doğru olduğu belli olur.
ORM(object Relation Mapping) Musteri adlı sınıf oluşturularak, veri yapıları nesnel hale getirilmiş Veri tipi güvenliği Northwind DB, örneklendi Northwind DB, nesnelleşti İçindeki tablolar nesnelleşti public class Musteri{….} public class Northwind:DataContext { public Table<Musteri> Musteriler; …… } Northwind db= new Northwind(“connetion string”); var contacts =from c in db.Musteriler Where c.Ad==“Sefer” select new {c.Ad, c.Soyad};
LINQ to Object Var Sadece lokal değişken olabilir İlk değer atamak zorunludur Bir metodun geri dönüş tipi var olamaz Var ile bildirilen değişkene farklı bir değer atanamaz
Linq examples
Extension Methods Yapı, sınıf ve ara yüzler için Statik sınıf içinde tanımlanabilir Bildirimi static olarak yapılmalıdır Geliştirilecek tipin bildirimi, Genişleme metodunun ilk parametresi olmalı önüne this anahtar sözcüğü gelmeli Erişilebilir olmalı Sınıfın kendi metodu öncelikli şekilde çağırılır. Aşırı yüklenebilir. Bir tipe farklı static sınıflar içinde genişleme metodu eklenebilir. İmzalar farklı olmalıdır. LINQ haricinde de kullanılabilir.
Örnek
Lambda İfadeleri Kodun veri olarak ifade edilmesinde kullanılır. Lisp, python, schema gibi dillerde de kullanılmaktadır Sorgulama yaparken (parametre)=>(ifade gövdesi) Expression gövdeli x=>x+2 ; (int x)=x+1; Statement Gövdeli X=> {return x+3}; (x,y)=>x+y; ()=>{return true;}
Örnek Devam int[ ] numbers = { 10, 20, 30, 40, 1, 2, 3}; var subset = from i in numbers where i < 10 select i; foreach (var i in subset) Console.WriteLine("{0} < 10", i); Console.WriteLine() numbers[0] = 4; ******************************** 1<10 4<10 2<10 1<10 3<10 2<10 3<10 *********************** int[] subsetAsIntArray = (from i in numbers where i < 10 select i).ToArray() (from i in numbers where i < 10 select i).ToArray<int>(); List<int> subsetAsListOfInts = (from i in numbers where i < 10 select i).ToList<int>();
Örnek devam class Car { } public string PetName = string.Empty; public string Color = string.Empty; public int Speed; public string Make = string.Empty; } List<Car> myCars = new List<Car>() { new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"}, new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"} }; static void GetFastCars(List<Car> myCars) var fastCars = from c in myCars where c.Speed > 55 select c; foreach (var car in fastCars) Console.WriteLine("{0} is going too fast!", car.PetName);
index
Partial Methods Kısmi metotlar sadece kısmi tipler içinde bildirilebilir. Kısmi metodların gövdesi olamk zorında değildir. partial anahtar kelimesi kullanılır Geri dönüş değerleri void olmak zorunda dır. Override, virtual, new, abstract ve sealed kullanılamaz Static olabilirler Erişim belirleyici kullanılmaz
LINQ to SQL Classes corresponding to databasse tables and records are created
Update Delete Insert CRUD Inserting new record (LinqForms is the name of project)
Update Delete Insert CRUD
Update Delete Insert CRUD Db.Yazars.DeleteOnSubmit( kayit ) Db.SubmitChanges()
LINQ examples
Example 1
LINQ Example 2
LINQ Ex3