Lambda Expression Take() Komutu
-
Hocalar merhaba,
var post = db_context.Posts.ToList().OrderByDescending(x => x.PostAdi).Take(1);
Üstteki kodun sql profilerden saf sql çıktısına bakıyorum "select * from Post" yazıyor. Take komutu ile 1 kaydı getirmek istiyorum ama bu lambda hepsini alıp ekrana 1 tanesini basıyor sadece. 1.000.000 kayıtlı tabloda nasıl yapacağız?
aynı işlemi linq ile test edince sql çıktısında select top 1 * from'u gördüm sıkıntı yok. Bu lambada ne iş böyle ?
-
çözüm take komutunu yanlış yerde kullanmammış :) konu olarak açtıktan sonra aklıma geliyo bu çözümleri denemek :D
-
javaya da geldi ya lambda helal olsun takip edip kullanan varmış diyordum ki farklı dil çıktı :)
-
take(1) almak yerine first ya da firstordefault u çalıştır hocam
take ile her zaman iterate alırsın. direk nesneye ulaşmak için first ya da firstordefault. Dönen değerde sıkıntı olacağını düşünüyorsan da firstordefault u kullan
burada güzel bir açıklama var
http://stackoverflow.com/a/1024577/1022138
-
var post = db_context.Posts.ToList().OrderByDescending(x => x.PostAdi).Take(1)
"Posts.ToList()" dediğin anda zaten tüm Posts tablosunu liste olarak almış oluyorsun, sonrasında yazdığın "OrderByDescending" ve "Take" aldığın tüm datalar üzerinde çalışmış oluyor.
-
unbalanced bunu yazdı
take(1) almak yerine first ya da firstordefault u çalıştır hocam
take ile her zaman iterate alırsın. direk nesneye ulaşmak için first ya da firstordefault. Dönen değerde sıkıntı olacağını düşünüyorsan da firstordefault u kullan
burada güzel bir açıklama var
http://stackoverflow.com/a/1024577/1022138
1 orada lafın gelişiydi hocam yoksa dediğin doğru. Linke bakıyorum şimdi.
alma sırası önemlymiş evet
trampfd :) -
hocam 1 in olup olmaması önemli değil, take her zaman iterate dönderir ama first direk nesneyi yollar sana.. O yüzden söyledim first kullan diye eğer sadece tek nesne alacaksan.. ya da single a da bakabilirsin..
ayrıca sıralama konusunu zaten çözmüşsün :)
kolay gelsin, lambda düzeldir :)
-
ToList() dediğin için Queryable nesneyi Enumerable yapmış. yani önce tüm datayı ram'e almış. sonra o data üzerinde order yapıp take 1 yapmış.
ToList kaldır sorun yok