27 Kasım 2016 Pazar

LINQ Nedir? Ne için kullanılır?


LINQ(Language Integrated Query); Microsoft’un ,Visual Studio 2008, .NET Framework 3.5 ve C# 3.0 ile kullanıma sunduğu, Entities, SQL, Datasets, xml  ve objects gibi sorgulama işlemi yapılabilecek platform farklılıklarını ortadan kaldırıp, performans kaybı olmadan, ortak bir dil ile daha az kod yazmamızı sağlayan, dil ile bütünleşmiş sorgulama ifadeleri, dil ile bütünleşmiş sorgulama metadolojisi dir.
LINQ ile , ADO.NET  kullanarak sorguladığımız nesnelere, XML dosyalarına ve .NET nesnelerine ulaşıp, sorgulama işlemleri yapabilmekteyiz. .Net Framework  bu sorgulama işlemlerini yapabilmemiz için bize specific provider lar sunmaktadır. Bu LINQ Provider(sağlayıcı) ları; Linq to Object, Linq to Dataset, Linq to SQL, Linq to Entity ve Linq to XML 'dir.
Linq to XML : XML dosyalarını sorgulamak için kullanılır. System.XML.Linq  kütüphanesi kullanılırak sorgulama işlemleri yapılabilir.
Linq to Object : Sadece IEnumerable<T> koleksiyonları için kullanılır. Yani , List tipindeki bir nesne, Linq to Object ile sorgulanabilir. Sorgulama işlemlerinde , System.Linq.Enumerable kütüphanesi kullanılır.
Linq to SQL : SQL Server veritabanında bulunan verileri sorgulamak için kullanılır. Linq ile SQL arasındaki ilişki DBML ( Database Markup Language - Veritabanı İşaretleme Dili ) ile kurulur.
Linq to Dataset : ADO.NET DataSet tiplerini sorgulamak için kullanılmaktadır.
Linq to Entity : ADO.NET Entity Framework tarafından oluşturulan nesneleri sorgulamak için kullanılır.
Linq to SQL ile Linq to Entity Arasındaki Fark : Linq to SQL sadece SQL veri tabanındaki verileri sorgulamayı sağlarken, Linq to Entity, Entity framework kullanıldığı için veritabanından bağımsız sorgulama yapmayı sağlar. Yani SQL veritabanına bağlı kalmadan, Entity Framework ile hangi veri tabanına bağlanılmış ise o veritabanında ki verileri sorgulamak için kullanılır.
LINQ sorgularını, bildirimsel ve yordamsal(yöntemsel) olmak üzere iki tür yazım şekli(syntax) ile yazabilmekteyiz;
Örnek : Birinci Yazılı sınav notu 55 ve daha büyük olan öğrencilerin soyadlarının listesini getiren Linq ifadeleri :
a) Bildirimsel syntax :
            var query = from ogrenci in ogrenciler
                        where ogr.YaziliSinavlar[0] >= 55
                        select ogr.Soyadi;
b) Yöntemsel syntax :
            var query = ogrenciler.Where(ogr => ogr.YaziliSinavlar[0] >= 55)
                                  .Select(ogr => ogr.Soyadi);
Örnek :
a) Bildirimsel syntax :
    List<Product> products = GetProductList();
    var categories = from p in products
        group p by p.Category into g
        select new { Category = g.Key, AveragePrice = g.Average(p => p.UnitPrice) };
ObjectDumper.Write(categories);
b) Yöntemsel syntax :
    List<Product> products = GetProductList();
    var categories= products.GroupBy(p => p.Category)
        .Select(g => new { Category = g.Key, AveragePrice = g.Average(p => p.UnitPrice) });
    ObjectDumper.Write(categories);
Örnek Çıktı;
Category=Beverages 
AveragePrice=37.979166666666666666666666667 
Category=Condiments 
AveragePrice=23.0625 
Category=Produce 
AveragePrice=32.3700 
Category=Meat/Poultry 
AveragePrice=54.006666666666666666666666667 
Category=Seafood 
AveragePrice=20.6825 
Category=Dairy Products 
AveragePrice=28.7300 
Category=Confections 
AveragePrice=25.1600 
Category=Grains/Cereals
AveragePrice=20.2500
     Daha detaylı sorgulama örneklerini “https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b” ve “http://yazilim.cevapsitesi.com/EtiketMakalesi/linq_11/21/linq-gruplama-grouping-ornekleri”  kaynaklarından inceleyebilirsiniz.

24 Kasım 2016 Perşembe

MS SQL Sorgulama İşlemlerinde Kullanılan Başlıca Fonksiyonlar

COUNT() : Bir tabloda seçili olan alan içerisindeki değerleri saymak için COUNT fonksiyonu kullanılır.

SUM( ) : Belirtilen kolondaki kayıtların değerlerinin Sayısal toplamını bulur.
SELECT SUM(Maas) FROM Personel;(“Personel” tablosundaki tüm maaşların toplamını getirir)

AVG() : Belirlenen bir alan içerisindeki verilerin aritmetik ortalamasını alır.
SELECT AVG(Maas) FROM Personel; (“Personel” tablosundaki personellerin maaşlarının ortalama değerini getirir)
SELECT SUM(Maas)/COUNT(*) FROM Personel; (Bu sorgu da bir üstteki gibi “Personel” tablosundaki personellerin maaşlarının ortalama değerini getirir)
“Personel” isimli tablomuzda aşağıdaki gibi örnek kayıtlarımız olsun;

Örneğin , yukarıdaki “Personel” tablosundaki personellerden “Maaş Ortalaması 5000’ den büyük olan personellerin listesini” bulmak istersek sorgu aşağıdaki gibi olmalıdır;
SELECT * FROM (SELECT AVG(Maas) ORTALAMA_MAAS ,AdiSoyadi from Personel GROUP BY AdiSoyadi) P WHERE P.ORTALAMA_MAAS>5000;
Sorgu sonucunda gelen kayıtlar aşağıdaki gibi olacaktır;

MAX() : Tabloda seçtiğimiz alanda en yüksek sayısal değeri almak için MAX komutunu kullanabiliriz.
SELECT MAX(Maas) FROM Personel; (“Personel” tablosundaki en yüksek maaş değerini getirir)

MIN() : MIN komutuda MAX komutunun tam tersi olarak seçtiğimiz alandaki en düşük sayısal değeri bulmamızı sağlar.
SELECT MIN(Maas) FROM Personel; (“Personel” tablosundaki en düşük maaş değerini getirir)

LOWER() : Belirli alan içindeki verileri küçük harfe çevirir.
SELECT LOWER('Arif'); (Çıktı : arif şeklinde olacaktır)

UPPER() : Text olarak belirtilen alanı büyük harfe çevirir.
SELECT UPPER('Arif'); (Çıktı : ARİF şeklinde olacaktır)

DATALENGTH() : Yazıda boşluklar dahil, kaç karakter olduğunu verir.
SELECT DATALENGTH('A RİF') (Çıktı : 5 olur)

ROUND() : Belirlenen alandaki sayının virgülden sonraki kısmının yuvarlatılmasını sağlar.
SELECT ROUND(15.749,2) (Çıktı : 15.750 şeklinde olacaktır)

MS SQL’ de LIKE Operatörü ve Özel Karakterlerin Kullanımı

MSSQL’ de, Tablo içerisindeki verileri, herhangi bir sütunun içerdiği bilgiye göre LIKE operatörü yardımıyla filtrelemek mümkündür. LIKE operatörünü aşağıdaki joker(özel) karakterler ile beraber kullanabiliriz;

Joker Karakterler
Açıklaması
%
Birden fazla harf ya da rakamın yerini tutar.
_
Bir tek harf veya rakamın yerini tutar.
[HARF]
Herhangi bir harf yerine gelebilecek harfleri belirtir.
[^HARF]
Herhangi bir harf yerine gelemeyecek harfleri belirtir.
[A-Z]
A ile Z arasındaki harfleri belirtir.

Örnekler: 
SELECT * FROM Personel WHERE Adi LIKE 'arif%'  (Adı “arif” ile başlayan Personel tablosu kayıtlarını getirir)
SELECT * FROM Personel WHERE LOWER(Adi) LIKE '%arif%' (Personel tablosu içerisindeki kayıtlardan ismi içerisinde “arif” geçen tüm kayıtları getirir)
Diğer bazı arama koşulları ve anlamları;
LIKE ‘REST%’ : İlk 4 harfi REST olan tüm kayıtları getirir
LIKE ‘%rif’        : Son üç harfi “rif” olan tüm kayıtları getirir
LIKE ‘_rif’         : Son iki harfi “rif” olan, üç harften oluşan tüm kayıtları getirir
LIKE ‘[EP]%’    : E veya P harfleriyle başlayan tüm kayıtlar
LIKE ‘[D-Y]rif'   : “rif” ile biten ve ilk harfi D ile Y harfleri arasında olan dört harfli herhangi kelime
LIKE ‘A[^i]%’   : A ile başlayan ikinci harfi “i” olmayan tüm kayıtlar

Object Oriented Programming(OOP) Temel Prensipleri

OOP(Nesneye Yönelik Programlama) de/da dört temel prensipten bahsetmek mümkündür;
1) Abstraction(Soyutlama) : OOP de her somut olan şey “class” olarak soyutlanarak ifade edilmektedir. Her “class” bir “obje yani nesnedir”. Her nesnenin belirli özellikleri , methodları bulunur. (Örneğin Araba class ının rengi , araba classının içine yazılmış arabanın hızını artırma methodu gibi...)
Class lar normal , abstract veya interface olarak tanımlanabilirler.
Abstract classlar;
- Kod içerisinde "new" komutuyla oluşturulamazlar (bu sınıflardan nesne türetilemez).
- Bir sınıf yalnızca bir abstract sınıfına extend edebilir.
- Abstract sınıfla ona extend eden sınıflar arasında genellikle "is-a" ilişkisi vardır.
(Mercedes is a car , Mercedes extends Car dır , Mercedes bir arabanın sahip olduğu bütün metotlara sahiptir, metotlar Car sınıfında vardır, istenirse Mercedes içinde override edilebilirler)
- Abstract sınıfta metotlar ve değişkenler tanımlanabilir.
Interface ;
- Kod içerisinde "new" komutuyla oluşturulamazlar (bu sınıflardan nesne türetilemez).
- Bir sınıf birden fazla interface' e implement edilebilir.
- Interface sınıfını implemente eden eden sınıflar ile aralarında "can-do" ilişkisi vardır.
Örneğin Mercedes can parkItself, Mercedes implements Park , Park sınıfı "parkItself" adında bir metoda sahiptir , tüm Mercedes'ler kendi kendini park edebilmeli anlamlarına gelmektedir.
- Interface sınıfında sadece boş metotlar ve public static final değişkenler bulunabilir.
2) Encapsulation(Sarmalama) : Kod ve bu kodun üzerinde çalıştığı veriyi birbirine bağlayarak dışarıdan gelebilecek müdahale ve kötüye kullanmalara karşı onları koruyan mekanizmadır.(Koruyucu ambalaj) Arabanın vitesi sarmalanmıştır. İçerisinde yazılmış methodların yaptıkları işlere müdahale edemeyiz gibi.
3) Inheritance(Kalıtım) : Bir nesnenin başka bir nesnenin özelliklerini devralmasıdır.Örneğin “Ford” classının “Araba” classının tüm özelliklerini devralacak şekilde inherit edilmesi gibi.
4) Polymorphism(Çok çeşitlilik) : Farklı nesnelerin aynı methoda farklı cevap verebilmeleridir. Örneğin “Cokgen” classından türemiş olan “Ucgen,Dortgen,Besgen” isimli classların “alanHesapla()” isimli methodları farklı çeşitte sonuç üretirler.