首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于实体类的排序输出有关问题

2013-03-25 
关于实体类的排序输出问题延续之前的问题,实体类的排序输出问题。/// summary/// 实现IComparable接口,用

关于实体类的排序输出问题
延续之前的问题,实体类的排序输出问题。


/// <summary>  
        /// 实现IComparable接口,用kcNum做比较  
        /// </summary>  
        /// <param name="obj">比较对象</param>  
        /// <returns>比较结果</returns>  
        public class KeChen : IComparable
        {
            public string kcName { get; set; }
            public int kcNum { get; set; }
            public int CompareTo(object obj)
            {
                if (obj is KeChen)
                {
                    return kcNum.CompareTo(((KeChen)obj).kcNum);
                }
                return 1;
            }
        }

//查找子串的个数
        private int findstring(string str1, string str2)
        {
            int i, j;
            int str1len = str1.Length, str2len = str2.Length;
            int count = 0;
            for (i = 0; i < str1len - str2len + 1; i++)
            {
                for (j = 0; j < str2len; j++)
                {
                    if (str2[j] != str1[i + j]) break;
                }
                if (j == str2len) count++;

            }
            return count;
        }

    private void button1_Click(object sender, EventArgs e)
        {
           //……
          //最满意的任课老师 数据准备
            strSQL = "select * from dc_teacher";


            cmd = new SqlCommand(strSQL, conn);
            sda.SelectCommand = cmd;
            sda.Fill(ds, "BB");

            strSQL = "select ID,P4 from dc_vote where SYSID='" + myData.SYS_ID + "'";
            cmd = new SqlCommand(strSQL, conn);
            sda.SelectCommand = cmd;
            sda.Fill(ds, "DD");


            int[] strTnum1 = new int[ds.Tables["BB"].Rows.Count];
            for (int i = 0; i < ds.Tables["BB"].Rows.Count; i++)
            {
                string strID = ds.Tables["BB"].Rows[i][0].ToString();
                strTnum1[i] = 0;
                for (int j = 0; j < ds.Tables["DD"].Rows.Count; j++)
                {
                    string strP4 = ds.Tables["DD"].Rows[j][1].ToString();
                    strTnum1[i] = strTnum1[i] + findstring(strP4, strID);
                }
            }

            string strTeacher = "";
            //初始化教师并排序  最满意的任课教师  
            KeChen[] T1 = new KeChen[ds.Tables["BB"].Rows.Count];
            for (int i = 0; i < ds.Tables["BB"].Rows.Count; i++)
            {
                T1[i] = new KeChen() { kcName = ds.Tables["BB"].Rows[i][1].ToString(), kcNum = strTnum1[i] };
            }

            Array.Sort(T1);
            Array.ForEach<KeChen>(T1, (s) =>
            {
                strTeacher = strTeacher + s.kcName + "   " + s.kcNum.ToString() + "      ";
            });



            //下面输出教师名称+满意度strTeacher
            //……

}


这是做的一个对教师评价的一个程序部分代码,因为是多选,所以把每个选择的教师ID用“|”存储,统计时候再取出比较。七拼八凑的代码,感觉程序写的比较臃肿,思路也不够清晰,数据量大的情况下,估计效率比较低。
请问:
1,有没有更好的数据库设计方式及实现思路?
2、这样得出的结果是从小到大排列,我想从大到小排列,该如何写?
3、不改变主体思路,怎样使代码更简洁高效?

ps:35岁+才学C#,感觉还在用多年前的vb6.0去理解C#2010,每进步一点点都是经过查阅很多资料,真是步步荆棘啊! object 数据库 string
[解决办法]
1,2,3一起回答了
Linq 或者Lambda 

ps:35岁了还code,真汉子!
[解决办法]
解答你第2个问题
private static int CompareBy1(KeChen x, KeChen y)
{
   return x.kcNum.CompareTo(y.kcNum);
}
private static int CompareBy2(KeChen x, KeChen y)
{
   return y.kcNum.CompareTo(x.kcNum);
}

Array.Sort(T1,CompareBy1); //升序排列
Array.Sort(T1,CompareBy2); //降序排列

热点排行