如何对通用类(如List)的值进行排序 [英] How to sort values for general classes like List

查看:98
本文介绍了如何对通用类(如List)的值进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我想以字符串形式对月份进行排序,但我要从数据库中以整数形式对它们进行排序,并希望通过列表类对其进行排序.

我需要别人的帮助.

我的代码如下:

Hello guys,

I would like to sort months as string but I get them from the database as integer and I would like to sort them by list classes.

I need someone''s help.

My Codes are as below:

public int CompareTo(List_Data data)
     {
         return (this.Month - data.Month);
     }


 public class List_Dondur
 {

     List_Data data;

     private List<List_Data> _list_Kiraci_Bilgi_Ay = new List<List_Data>();

     public List<List_Data> List_Kiraci_Bilgi_Ay
     {
         get { return _list_Kiraci_Bilgi_Ay; }
         set { _list_Kiraci_Bilgi_Ay = value; }
     }

     public List_Dondur()
     {
         List_Kiraci_Bilgi_Ay_1();

         Sirala();
     }

     private void Sortit()
     {
         this.List_Kiraci_Bilgi_Ay.Sort();
     }

     public void List_Kiraci_Bilgi_Ay_1()
     {
         string daire_kiraci = "SELECT DRNO,CRKOD,OT_ID FROM DAIRE_KIRACI";
         ArrayList ls_drno = Baglanti.Komut.IntegerKoleksiyonEkle(daire_kiraci, 0);
         ArrayList ls_crkod = Baglanti.Komut.MetinKoleksiyonEkle(daire_kiraci, 1);
         ArrayList ls_otid = Baglanti.Komut.IntegerKoleksiyonEkle(daire_kiraci, 2);
         //List<List_Data> liste = new List<List_Data>();
         string[] dz_ay = Enum.GetNames(typeof(Months));

         for (int i = 0; i < ls_drno.Count; )
         {
             string crkod = ls_crkod[i].ToString();

             int drno = Convert.ToInt32(ls_drno[i]);

             string drad = Baglanti.Komut.MetinselVeriOku("SELECT DRAD FROM DAIRELER WHERE DRNO='" + drno + "'", 0);
             string adi = Baglanti.Komut.MetinselVeriOku("SELECT ADI FROM CARILER WHERE CRKOD='" + crkod + "'", 0);
             string soyadi = Baglanti.Komut.MetinselVeriOku("SELECT SOYADI FROM CARILER WHERE CRKOD='" + crkod + "'", 0);
             string _array = "SELECT  AY,IS_TUR_ID, SUM(BORC-ALACAK) FROM CRHAREKET WHERE CRKOD='" + crkod + "'  GROUP BY AY,IS_TUR_ID";

             ArrayList ls_ay = Baglanti.Komut.IntegerKoleksiyonEkle(_array, 0);
             ArrayList ls_tur = Baglanti.Komut.IntegerKoleksiyonEkle(_array, 1);
             ArrayList ls_tutar = Baglanti.Komut.DecimalKoleksiyonEkle(_array, 2);

             int krdurum = Convert.ToInt32(ls_otid[i]);
             decimal kira = 0;
             decimal deposit = 0;
             decimal elektrik = 0;
             decimal su = 0;
             string blok = Baglanti.Komut.MetinselVeriOku("SELECT BLADI FROM BLOKLAR B, DAIRELER D WHERE B.BLNO=D.BLNO AND D.DRNO='" + drno + "'", 0);
             for (int k = 0; k < ls_ay.Count; )
             {
                 kira = deposit = elektrik = su = 0;
                 int ay = Convert.ToInt32(ls_ay[k]);
                 string _ay = dz_ay[ay].ToString();
                 int turid = Convert.ToInt32(ls_tur[k]);
                 decimal miktar = Convert.ToDecimal(ls_tutar[k]);
                 if ((int)Islem_Id.DEPOSİT == turid)
                     deposit = miktar;
                 else if ((int)Islem_Id.ELEKTRİK == turid)
                     elektrik = miktar;
                 else if ((int)Islem_Id.KİRA == turid)
                     kira = miktar;
                 else if ((int)Islem_Id.SU == turid)
                 {
                     su = miktar;
                 }
                this.List_Kiraci_Bilgi_Ay.Add(veri=new List_Data(drno, drad, crkod, adi, soyadi, kira, deposit, elektrik, su, blok, krdurum, _month, month));
                 k++;
             }



             i++;
         }
         veri.CompareTo(data);



     }

     decimal Deger_Dondur(string crkod, int is_turid)
     {
         string sorgu = "SELECT SUM(BORC-ALACAK) FROM CRHAREKET WHERE CRKOD='" + crkod + "' AND IS_TUR_ID='" + ıs_turid + "'";
         string sayim = "SELECT COUNT(*) FROM CRHAREKET WHERE CRKOD='" + crkod + "' AND IS_TUR_ID='" + ıs_turid + "'";
         if (Baglanti.Komut.IntegerVeriOku(sayim, 0) > 0)
             return Baglanti.Komut.DecimalVeriOku(sorgu, 0);
         else
             return 0;

     }

     public List<List_Data> List_Kiraci_Bilgi()
     {
         string daire_kiraci = "SELECT DRNO,CRKOD,OT_ID FROM DAIRE_KIRACI";
         ArrayList ls_drno = Baglanti.Komut.IntegerKoleksiyonEkle(daire_kiraci, 0);
         ArrayList ls_crkod = Baglanti.Komut.MetinKoleksiyonEkle(daire_kiraci, 1);
         ArrayList ls_otid = Baglanti.Komut.IntegerKoleksiyonEkle(daire_kiraci, 2);
         List<List_Data> liste = new List<List_Data>();
         string[] dz_ay = Enum.GetNames(typeof(Aylar));
         for (int i = 0; i < ls_drno.Count; )
         {
             int krdurum = Convert.ToInt32(ls_otid[i]);
             int drno = Convert.ToInt32(ls_drno[i]);
             string crkod = ls_crkod[i].ToString();
             string drad = Baglanti.Komut.MetinselVeriOku("SELECT DRAD FROM DAIRELER WHERE DRNO='" + drno + "'", 0);
             string adi = Baglanti.Komut.MetinselVeriOku("SELECT ADI FROM CARILER WHERE CRKOD='" + crkod + "'", 0);
             string soyadi = Baglanti.Komut.MetinselVeriOku("SELECT SOYADI FROM CARILER WHERE CRKOD='" + crkod + "'", 0);
             decimal kira = Deger_Dondur(crkod, 1);
             decimal deposit = Deger_Dondur(crkod, 2);
             decimal elektrik = Deger_Dondur(crkod, 3);
             decimal su = Deger_Dondur(crkod, 4);
             string blok = Baglanti.Komut.MetinselVeriOku("SELECT BLADI FROM BLOKLAR B, DAIRELER D WHERE B.BLNO=D.BLNO AND D.DRNO='" + drno + "'", 0);


             liste.Add(new List_Data(drno, drad, crkod, adi, soyadi, kira, deposit, elektrik, su, blok, krdurum));

             i++;
         }

         return liste;
     }

 }

 public enum Months
 {
     OCAK = 1,
     ŞUBAT = 2,
     MART = 3,
     NİSAN = 4,
     MAYIS = 5,
     HAZİRAN = 6,
     TEMMUZ = 7,
     AĞUSTOS = 8,
     EYLÜL = 9,
     EKİM = 10,
     KASIM = 11,
     ARALIK = 12
 }

推荐答案

调用 List< t> .Sort()时,它将使用默认比较器",但是不是您想要的那个.您可以通过以下方式指定比较:

When you call List<t>.Sort(), it uses the "default comparer", but that isn''t the one you want. You can specify the comparison though:

private void Sortit()
{
    this.List_Kiraci_Bilgi_Ay.Sort(
        (item1,item2) => {
            return item1.Month.CompareTo(item2.Month);
        }
    );
}


这篇关于如何对通用类(如List)的值进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆