none
C# veritabanındaki veriyi diziye atama RRS feed

  • Soru

  • Herkese iyi günler. Bir bitirme projesi için uğraşıyorum. Veri tabanında doktorlar isimli bir tablom var. Bu tabloda 6 adet doktor var. Bu doktorlar için bir vardiya yapmam lazım. Bu doktorları nasıl bir diziye atayıp aylık vardiya yapabilirim
    30 Haziran 2019 Pazar 11:58

Tüm Yanıtlar

  • var doktorlar = db.Doktorlar.ToArray();

    Diziye atamanın amacini anlamasam da, boyle diziye atayabilirsiniz. Doktorlar icin öyle kisi sayısıyla vardiya ataması olacak is degil ama madem oyle yapılacak, gerisi icin algoritma oluşturabilirsiniz (yer yer değişmekle beraber genelde, doktorlar, nöbet olmasi halinde, 24 + 8 saat calisirlar. Ertesi gunun nöbetçisinin ilk 8 saatinde ikisi de ise devam eder). 

    Not: Bitirme projelerinde, hastane, doktorlar gibi hayati oneme haiz islere karistirmalarindan hiç hoşlanmıyorum.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    1 Temmuz 2019 Pazartesi 16:04
    Yanıtlayıcı
  • Ben normal olarak diziye atamak için ToList() metodunu kullanıyorum. Siz ToArray() kullanmışsınız. 

    http://bbs.bugcode.cn/t/3273#IDc3cbdd05b08432eaff25fd465e675274

    Sitesinden baktım galiba ToArray daha fazla bellek kaplıyormuş

    ToList() genelde IEnumerable için kullanılır yaziyor. 

    Hangi yapı için hangisini kullanmalıyız. Açıklayabilir misiniz?

    1 Temmuz 2019 Pazartesi 18:16
  • Siz "dizi" dediğiniz icin dizi yani array - ToArray kullandım.

    dizi = Array

    liste = List

    numaralanabilir interface = IEnumerable

    sorgulanabilir interface = IQueryable

    Boyle 3-5 kayitlik bir şey icin bosuna ToArray, ToList farkına bakmissiniz, aradaki fark 1 milisaniye tutmaz, yer farki ise olacağı tartisilir, test etmeye bile değmez. Asil soru sizin ihtiyacınız, dizi mi?, list mi? yoksa her ikisi de degil mi? O kaynakta aslında sorunun bir kismi cevaplanmış:

    "If you want a collection that can only be iterated and accessed by index, choose ToArray. If you want additional capabilities of adding and removing from the collection later on without much hassle, then do a ToList"

    Bir veritabanina karsi, Linq kullandiginizda, ne zaman ToArray, ToList, AsEnumerable ... gibi bir metod cagirsaniz, o zaman sonuc materyalize edilir, yani istediniz sorgu database'e gönderilir, sonuc alınır ve elinizde tum sonuc seti olur. Olayi anlamak icin, 6 doktor degil de 6 milyon doktor oldugunu dusunun. ToArray, ToList ya da AsEnumerable() dediginiz an database'e:

    select * from doktorlar

    gibi bir komut gidecek, ve sonuçta 6 milyon elemanli bir dizi, list, IEnumerable icin beklemeniz gerekecek, tabii onun icin de yer ayrılacak (aralarinda ToList daha az yer harcar ama farketmez sonucta ciddi miktarda yer gerekli). Asil soru, bu 6 milyon kaydın gelmesini beklemeli misiniz, ve\veya o kadar yer ayrılmalı mi? Bazen gerekebilir, tam olarak ne is yapilacagina bağlı. Veriye "streaming" tarzında ulaşabileceğiniz bir is icin gerekliyse, o zaman, ToArray, ToList, AsEnumerable gereksiz seyler. Onun yerine IQueryable kullanın. Kaba kod ornegi:

    var doktorlar = db.Doktorlar; 
    // ToArray, ToList, AsEnumerable yok.
    // Bu IQueryable<Doktor> doktorlar

    Database'e giden hiçbir sey yok, ta ki kullanmaya baslayana kadar:

    foreach (var doktor in doktorlar)
    {
      // Streaming
      // doktor ile bir sey yap
    }

    (Array ve List, IEnumerable - IQueryable da aslinda IEnumerable'dan turemis bir class).

    Genel olarak Linq okumak isterseniz blogumda şubat 2009 da baslayan seriyi okuyabilirsiniz.

     

     



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    1 Temmuz 2019 Pazartesi 19:04
    Yanıtlayıcı