关于实体类的排序输出问题
延续之前的问题,实体类的排序输出问题。
/// <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); //降序排列