none
C# Datatable Min-Max RRS feed

  • Soru

  • merhaba datatable içerisinde min ve max değerlere ait isimleri bulmam lazım değerleri buluyorum ama karşılığı gelen isimi bulamıyorum datatable sutunları adsoyad ve yaş şeklinde burada maximum yaşın kim olduğunu bulmam lazım

    int enbuyukyas =Convert.ToInt32(dtable.Compute("Max(yas)", ""));

    bu şekilde en büyük değeri buluyorum ama en büyük değerin adsoyad sutununda karşılığını bir türlü bulamadım

    Not: sql ile veritabanından sorgu istemiyorum datatable olması lazım

    şimdiden teşekkür ederim.

    10 Nisan 2018 Salı 12:22

Yanıtlar

  • pardon şimdi sonuç alabildim fakat anladığım kadarı ile sizin gösterdiğiniz şekilde liste sıralaması yapıyor ve en üst yani yüksek değeri alıyor benim istediğim sonucu alabilmem için iki ayrı sorgu kullanmam gerekecek

    textbox1.Text="En yaşlı Kişinin Adı";

    textbox2.Text="En Yaşlı Kişinin Yaşı";

    Zaten max,min tüm diziyi dönmeden bulunmaz. İkisini tek döngüde şöyle bulabilirsiniz:

    var maxAge = int.MinValue;
    var minAge = int.MaxValue;
    var maxName = "";
    var minName = "";
    
    dtable
    		.Rows
    		.Cast<DataRow>()
    		.ToList()
    		.ForEach(r =>
    		{
    
    			if ((int)r["yas"] > maxAge)
    			{
    				maxAge = (int)r["yas"];
    				maxName = r["adsoyad"] as string;
    			}
    
    			if ((int)r["yas"] < minAge)
    			{
    				minAge = (int)r["yas"];
    				minName = r["adsoyad"] as string;
    			}
    
    		});
    döngü sona erdiğinde yukarıdaki değişkenler dolacaktır. Metin kutularınızı bunlara eşitleyebilirsiniz. Fakat neden datatable gibi hantal bir şeyi kullanıyorsunuz? 



    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 10 Nisan 2018 Salı 13:20
    • Yanıt Olarak İşaretleyen tetee 10 Nisan 2018 Salı 13:24
    10 Nisan 2018 Salı 13:19

Tüm Yanıtlar

  • var sonuc = dtable
    		.Rows
    		.Cast<DataRow>()
    		.OrderByDescending(r => (int)r["yas"])
    		.Select(r => r["adsoyad"] as string)
    		.First();
    gibi.

    www.cihanyakar.com

    10 Nisan 2018 Salı 12:45
  • cihan bey çok teşekkürler fakat linq bilmiyorum bu sonucu nasıl textboxta gösterebilirim?
    10 Nisan 2018 Salı 13:01
  • TextBox1.Text = sonuc;

    www.cihanyakar.com

    10 Nisan 2018 Salı 13:02
  • onu denemiştim ama hatada vermiyor değerde göstermiyor
    10 Nisan 2018 Salı 13:04
  • pardon şimdi sonuç alabildim fakat anladığım kadarı ile sizin gösterdiğiniz şekilde liste sıralaması yapıyor ve en üst yani yüksek değeri alıyor benim istediğim sonucu alabilmem için iki ayrı sorgu kullanmam gerekecek

    textbox1.Text="En yaşlı Kişinin Adı";

    textbox2.Text="En Yaşlı Kişinin Yaşı";

    10 Nisan 2018 Salı 13:08
  • pardon şimdi sonuç alabildim fakat anladığım kadarı ile sizin gösterdiğiniz şekilde liste sıralaması yapıyor ve en üst yani yüksek değeri alıyor benim istediğim sonucu alabilmem için iki ayrı sorgu kullanmam gerekecek

    textbox1.Text="En yaşlı Kişinin Adı";

    textbox2.Text="En Yaşlı Kişinin Yaşı";

    Zaten max,min tüm diziyi dönmeden bulunmaz. İkisini tek döngüde şöyle bulabilirsiniz:

    var maxAge = int.MinValue;
    var minAge = int.MaxValue;
    var maxName = "";
    var minName = "";
    
    dtable
    		.Rows
    		.Cast<DataRow>()
    		.ToList()
    		.ForEach(r =>
    		{
    
    			if ((int)r["yas"] > maxAge)
    			{
    				maxAge = (int)r["yas"];
    				maxName = r["adsoyad"] as string;
    			}
    
    			if ((int)r["yas"] < minAge)
    			{
    				minAge = (int)r["yas"];
    				minName = r["adsoyad"] as string;
    			}
    
    		});
    döngü sona erdiğinde yukarıdaki değişkenler dolacaktır. Metin kutularınızı bunlara eşitleyebilirsiniz. Fakat neden datatable gibi hantal bir şeyi kullanıyorsunuz? 



    www.cihanyakar.com


    • Düzenleyen Cihan YakarMVP 10 Nisan 2018 Salı 13:20
    • Yanıt Olarak İşaretleyen tetee 10 Nisan 2018 Salı 13:24
    10 Nisan 2018 Salı 13:19
  • teşekkür ederim yanıtınız için her defasında farklı sorgularla sqlden veri alıp datatableye doldurmak istemedim datatableden başka ne önerirsiniz? fikirleriniz benim için çok önemli
    10 Nisan 2018 Salı 13:26
  • SQL den veri okumak için DataTable kullanımı 2003-2006 neredeyse tek yoldu.. Generic tiplerin .net'e gelmesiyle buna ihtiyaç azaldı. Ben DataReader ile bir nesne listesine okuma taraftarıyım. Ama proje bu kadar basitse Entity Framework daha iyi olacaktır.

    www.cihanyakar.com

    10 Nisan 2018 Salı 14:18