folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Lambda Expression Take() Komutu



Lambda Expression Take() Komutu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    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 ?

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    çözüm take komutunu yanlış yerde kullanmammış :) konu olarak açtıktan sonra aklıma geliyo bu çözümleri denemek :D

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    whopper
    whopper's avatar
    Kayıt Tarihi: 26/Haziran/2008
    Erkek

    javaya da geldi ya lambda helal olsun takip edip kullanan varmış diyordum ki farklı dil çıktı :)

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    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

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek

    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.


    Ehl-i Byte
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek
    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 :)

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    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 :)


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    JsonObject
    JsonObject's avatar
    Kayıt Tarihi: 08/Haziran/2015
    Erkek

    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

Toplam Hit: 1114 Toplam Mesaj: 8