Pazar, Mart 13, 2011

Linq ile Row_Number() Kullanımı

Bazen veri tabanından verileri sıralı olarak satır numaralarına göre çekmek isteyebiliriz. Örneğin NorthWind veri tabanını kullanarak Products tablosundan ProductName,UnitPrice ve QuantityPerUnit alanlarını satır numarası ile birlikte çekelim. Mssql'de böyle bir iş için aşağıdakine benzer bir sql cümlesi yazarak işimizi halledebiliriz.


select row_number() over (order by ProductID) as 'Satır No', ProductName, UnitPrice, QuantityPerUnit from Products


Şimdide böyle bir işlemin linq ile nasıl yazıldığına bakalım.


var productInfo = db.Products.Select(s => new { s.ProductName,s.UnitPrice,s.QuantityPerUnit})
.AsEnumerable()
.Select((s, sayac) => new
{
s.ProductName,
s.UnitPrice,
s.QuantityPerUnit,
satir_no= sayac + 1
});



Ne yaptığımıza bakacak olursak. İlk select işleminde ilgili alanları veri tabanında çektik. AsEnumarable() ile normalde IQueryable olan dönüş değerini IEnumerable'a çevirdik.

Dikkat etmemiz gereken yer ikinci select işlemi. Burada parantez içinde s ve sayac adında iki tane parametre tanımladık. s tablonun kendisine referans eder. sayac ise sıfırda başlayarak her kayıt için bir artan değişken görevini görür.

Linq ile Row_Number() kullanımı bu kadar.

Kolay gelsin...

Hiç yorum yok: