Bilmek istediğin her şeye ulaş

LINQ

ASP.NET

Formatting of continuation data will be changing soon. To continue using the current formatting, use the 'rawcontinue' parameter. To begin using the new format, pass an empty string for 'continue' in the initial query.

Eylül 2014

user_4330505, bir soruya yanıt verdi.

LinqtoSql de linq sorgusu ile veritabanı sorgusu yaptığımızda, veritabanı kısmında oluşan sql sorgusuna nasıl ulaşırız, elde ederiz?

ToString() metodu sorguyu verir.
Örnek:

Entities db = new Entities();
string sorgu=(from c in db.Categories where c.CategoryID>7 select c.CategoryName).ToString();
MessageBox.Show(sorgu);
Sonuç :
SELECT
[Extent1]. [CategoryName] AS [CategoryName]
FROM [dbo]. [Categories] AS [Extent1]
WHERE [Extent1]. [CategoryID] > 7

Yanlış anlamadıysam istediğin bu.
Mart 2014

Hakan Köse, bir soruya yanıt verdi.

LINQ to SQL'i performans açısından nasıl değerlendirirsiniz?

LINQ kullanım açısından, ilk kullanıma sunulduğu zaman gerçekten inanılmaz bir zaman kazancı sağladı. Eskiden veri tabanı ile bir iş yapmak için sadece SQL sorgusu yapmıyorduk, ayrıca bu sorguları güvenli ve yüksek performans ile gerçekleyebilmek için bir sürü kod yazmak gerekiyordu. Yani yazılımcı olarak en azından (aslında başka bir uzmanlık alanı olan) T-SQL bilmek gerekiyordu. LINQ yapısı ile sizin elle yazamayacağınız SQL sorguları bile otomatik olarak arka planda çok zeki biçimde dönüştürülüyor.

Eksileri yok mu? Elbette var ama bu eksikler gideriliyor. Microsoft LINQ üzerindeki desteğini çekti ancak bunu duyurduğunda aynı yapı üzerine kurulu ve daha stabil olan Entity Framework (EF) geliştiriliyordu ve LINQ kullananların zaman içinde Entity Framework'e geçmelerini önerdiler. EF, LINQ'nun geliştirilen hali diyebiliriz. Yapı olarak aynılar.

Performans konusuna gelirsek, LINQ ve EF yapı itibari ile, yazdığınız sorguyu ADO.NET sorgusu haline dönüştürür ve sorguyu gerçekleştirir. Yani, yazdıklarınız birer veri tabanı sorgusu haline dönüştürülüp işletilir. En nihayetinde arkada koşan işlem bir ADO.NET yapısıdır. O sebeple performans olarak çok büyük bir farklılık hissetmezsiniz. Bu konuda uzun zaman önce Microsoft Turkey Developer Support Team'den teknik biri ile konuşmuş ve aynı soruları sormuştum. Yazdıklarım ile aynı şeyi söylemişti ve demişti ki "Kendinizi hangisi ile daha rahat kod yazar hissediyor iseniz onu kullanın, tümü arka planda ADO.NET üzerine kuruludur".

O sebeple, avantajları açısından bakarsak hem LINQ hem de EF inanılmaz kolaydır ve size çok zaman kazandırır. Geliştirme zamanınızdan %45-50 tasarruf edebilirsiniz. Performans olarak ise, dikkat etmeniz gereken 1-2 nokta var; Lazy Loading ve Eager Loading denen sorgu hataları. Bu hem LINQ hem de EF için geçerli bir durum. Esasen temel sebebi ise ya yazdığınız sorgunun yanlış olması ya da veri tabanı tasarımınızda bir terslik olma ihtimali.

Kısaca, doğru bir veri tabanı tasarımı ve doğru yaılmış sorgular ile birlikte LINQ ve EF ile yapamayacağınız şey yoktur.

NOT: Performansı sorun edebilmeniz için gerçekten çok detaylı bir proje gerçekleştiriyor olmalısınız. Eğer projeniz küçük çapta sayılabilecek bir proje ise performansla ilgili neredeyse hiç fark hissetmezsiniz. Tabi yapıyı doğru kurduysanız.
Şubat 2012

İbrahim Aydın  yeni bir  gönderide  bulundu.

LINQ ile diziyi birden fazla alana göre sıralamak

C# altında, LINQ metotlarını/sorgularını kullanarak, dizi veya numaralandırılabilir (enumarable)
biçimdeki tanımlar üzerinde bir çok faydalı işlemi zahmetsiz bir
şekilde halledebiliyoruz. Bu işlemlerden birisi de tabii ki dizi
elemanlarını sıralayabilmek...

Ogrenci[] ogrenciler = ogrenciServisi.TumOgrencileriGetir();
ogrenciler = ogrenciler.OrderByDescending(ogr =>
ogr.KayitTarihi).ToArray();

Yaptığımız bu işlem ile; herhangi bir kaynaktan elde ettiğimiz 'Ogrenci'
tipine ait bir diziyi, 'KayitTarihi' alanına göre tersten sıraladık.
Peki eğer kayıt tarihine göre sıraladığımız bu dizide, aynı kayıt
tarihine sahip öğrencileri de isimlerine göre kendi aralarında sıralamak
istersek? Yani SQL'de kullandığımız 'order by KayitTarihi desc, Adi
asc' ifadesinin eşdeğerini yapmak istersek? Bu durumda
kullanabileceğimiz 'ThenBy' ve 'ThenByDescending' metotları da
bulunmaktadır.

Ogrenci[] ogrenciler = ogrenciServisi.TumOgrencileriGetir();
ogrenciler = ogrenciler.OrderByDescending(ogr =>
ogr.KayitTarihi).ThenBy(ogr=> ogr.Adi).ToArray();

LINQ sorgulama cümlelerini kullanmayı, LINQ metotları ve lambda
expression kullanmaya tercih ediyorsanız, yaptığımız bu işlemin
karşılığı şu şekilde olacaktır:

Ogrenci[] ogrenciler = (from ogr in ogrenciler 
orderby ogr.KayitTarihi descending, 
ogr.Adi select ogr).ToArray();

...

11 kişi

Konunun Takipçileri

Alt Konu Başlıkları

Henüz bu konu başlığı ile ilgili konular bulunmuyor.