Soran
C# veritabanındaki veriyi diziye atama

Soru
-
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.
- Düzenleyen CetinBasozEditor 1 Temmuz 2019 Pazartesi 16:04
- Yanıt Olarak Öneren Mehmet Emin Kaymaz 1 Temmuz 2019 Pazartesi 16:20
-
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?
-
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.