Linq Operatörleri

Linq en çok kullanılan operatörleri

Operatör Açıklama
Where Kısıtlama operatörü
Select / SelectMany Veri kümesi için üye/kolon seçimi operatörü
Take / Skip /  TakeWhile / SkipWhile Verinin pozisyonuna göre parçalama operatörü. Sayfalama (paging) yapılırken faydalanılabilir.
Join / GroupJoin Bir anahtar veri üzerinden veri kümelerini birleştirme operatörü
Concat Veri kümelerini birbirine ekleme operatörü
OrderBy / ThenBy / OrderByDescending / ThenByDescending Sıralama operatörleri
Reverse Bir koleksiyonu ters çeviren sıralama operatörü
GroupBy Bir anahtar veri üzerinden gruplama operatörü
Distinct Tekrarlayan verileri teke indiren operatör
Union / Intersect Veri kümeleri için kesişim yada birleşim operatörü
Except Veri kümeleri için fark operatörü
AsEnumerable IEnumerable<T> tipine dönüşüm operatörü
ToArray / ToList Dizi yada List<T> tipine dönüşüm operatörü
ToDictionary / ToLookup Dictionary<K,T> yada Lookup<K,T> tiplerine dönüşüm operatörü
First / FirstOrDefault / Last / LastOrDefault / Single / SingleOrDefault Veri kümesindeki başlangıç yada bitiş elemanlarını seçme operatörü
ElementAt / ElementAtOrDefault Elemanın pozisyonu tabanlı seçim operatörü
DefaultIfEmpty Veri yoksa ilgili veri tipinin varsayılan değerini döndürme operatörü
Range Belli bir aralığa sahip sayı kümesi oluşturma operatörü
Repeat Bir değerin çoklu tekrarlarından oluşan veri kümesi oluşturma operatörü
Empty Boş veri kümesi oluşturma operatörü
Any/All Bir filtrenin veri kümesinde sağlanıp sağlanmadığını kontrol
Contains Bir elemanın veri kümesindeki varlığını kontrol
Count / LongCount Bir veri kümesindeki belli bir şartı sağlayan yada tüm elemanlarının sayısını hesaplama operatörü
Sum / Min / Max / Average Bir veri kümesindeki belli bir şartı sağlayan yada tüm elemanlar için hesaplama operatörü

Linq to Sql join kullanımı

2 farklı tablomuzda istenilen verileri getirmek için tabloları join ile bağlayabiliriz. Tabi ilişkili tablolar için entity framework‘ün include methodunu kullanmak çok daha kolaydır.

var q1 = from c in dataContext.Customers
         join o in dataContext.Orders on c.CustomerID equals o.CustomerID
         select new
         {
             c.CustomerID,
             c.ContactName,
             o.OrderID,
             o.OrderDate
         };

Bu sorguda müşteri ve sipariş tablosundan CustomerId,ContactName,OrderId ve OrderDate sütunundaki verileri getirmektedir.

T-SQL İçerisinde Dinamik ORDER BY kullanımı

Stored Procedure içerisinde dinamik sıralama yapmak için CASE ifadesini kullanabiliyoruz. Parametreden gelen değeri CASE ifadesi ile kontrol ederek istediğimiz alan adına göre sıralama yapabiliyoruz.

Declare @SiralamaTipi int =1 -- Buraya yazdığımız değere göre sorgu sonucu farklı şekilde sıralanacak.
SELECT * from AdminUser WHERE AdminUserId = @Id Order By
	Case When @SiralamaTipi = 1 then AdminUserId End Asc, -- AdminUserId'ye göre artan sıralama 
	Case When @SiralamaTipi = -1 then AdminUserId End Desc, -- AdminUserId'ye göre azalan sıralama

Entity Framework Power Tools

Code-first bir model oluşturduğumuzda modeli görsel olarak göremediğimiz için, model büyüdükçe neyin ne olduğunu görsel olarak görme ihtiyacı duyabiliyoruz. Bunun için EF Power Tools adında bir eklenti bulunuyor.

Eklentiyi kurduktan sonra Models klasörü içinde ki herhangi bir class a sağ tıkladığımızda açılan menüye Entity Framework seçeneğinin geldiğini görüyoruz. Bu menüden View Entity Data Model dersek, sadece read only olarak modelimizi bize oluşturuyor.

adresinden indirebilirsiniz.

Veritabanından grup id listesini getirme

Bazen gruplama listesi kullanırız ve gruba verileri listeleriz, fakat arama, rss gibi durumlarda grup belli olmadığı için tüm listenin ID(GrupIdleri)’sini almamız gerekebilir. Bunun için Entity’de şöyle bir sorgu ile Tüm grup Idlerini alabiliriz.

int[] groupID = db.DocumentGroup.Where(d => d.Deleted == false).Select(d => d.MemberId).ToArray();

Bu şekilde Tüm grubun ID Listesini almış olduk, bulunan IDlere ait verileri getirmek için ise;

db.Document.Where(d => groupID.Contains((int)d.GroupId) && d.Deleted == false).OrderByDescending(d => d.EndDate).ThenByDescending(d => d.EndTime).ToList();