求Dataset.select的一个个高效率的算法
我最近在开发一个wince 5.0下的程序,用VS 2005 C#开发。
问题是这样的:
这个是我写的一个查询dataset的函数。这个函数搜索的效率比较低,虽然效率比较低,但搜索出来的结果却非常准确。
/// <summary> ///根据条件查询是否有在指定范围内的记录 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="c"></param> /// <returns></returns> private DataRow[] Select_(double a,double b,double c) { try { double Big_b_FW = b + 0.006; double Big_a_FW = a + 0.006; double Small_b_FW = b - 0.006; double Small_a_FW = a - 0.006; double Big_c_FW = c + 50.0; double Small_c_FW = c - 50.0; DataRow[] dr = DS_PointInfo.Tables[0].Select("a < " + Big_a_FW.ToString() + "And a > " + Small_a_FW.ToString() + "AND b > " + Small_b_FW.ToString() + "AND b < " + Big_b_FW.ToString() + "AND c < " + Big_c_FW.ToString() + "AND c > " + Small_c_FW.ToString()); return dr; } catch(Exception err) { MessageBox.Show(err.ToString()); return null; } }
/// <summary> ///根据条件查询是否有在指定范围内的记录 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="c"></param> /// <returns></returns> private DataRow[] Select_JWD(double a,double b,double c) { try { double Big_a_FW = a + 0.006; double Small_a_FW = a - 0.006; double Big_b_FW = b + 0.006; double Small_b_FW = b - 0.006; double Big_c_FW = c + 50.0; double Small_c_FW = c - 50.0; DataRow[] dr = DS.Tables[0].Select("b > " + Small_b_FW.ToString() + " AND b < " + Big_b_FW.ToString()); if (dr.Length > 0) { DataTable DATAT = new DataTable(); DATAT = DS.Tables[0].Clone(); for (int i = 0; i < dr.Length; i++) { DATAT.Rows.Add(dr[i].ItemArray); } DataRow[] dr1 = DATAT.Select("a > " + Small_a_FW.ToString() + " AND a < " + Big_a_FW.ToString()); if (dr1.Length > 0) { DATAT.Rows.Clear(); DATAT = DS.Tables[0].Clone(); for (int i = 0; i < dr.Length; i++) { DATAT.Rows.Add(dr[i].ItemArray); } DataRow[] dr2 = DATAT.Select("c > " + Small_c_FW.ToString() + " AND c < " + Big_c_FW.ToString()); return dr2; } else { return dr1; } } else { return dr; } } catch(Exception err) { MessageBox.Show(err.ToString()); return null; } }
对于你的回复,小弟不胜感激,谢谢。
[解决办法]
帮你顶!!!
[解决办法]
最好先把你这个函数是用来做什么的说清楚一些噢..这样大家也许有其他方法哈..
[解决办法]
第二个函数算法有问题
if (dr.Length > 0)
{
DataTable DATAT = new DataTable();
DATAT = DS.Tables[0].Clone();
for (int i = 0; i < dr.Length; i++)
{
DATAT.Rows.Add(dr[i].ItemArray);
}
DataRow[] dr1 = DATAT.Select("a > " + Small_a_FW.ToString() + " AND a < " + Big_a_FW.ToString());
if (dr1.Length > 0)
{
DATAT.Rows.Clear();
DATAT = DS.Tables[0].Clone();
for (int i = 0; i < dr.Length; i++)
{
DATAT.Rows.Add(dr[i].ItemArray);
}
DataRow[] dr2 = DATAT.Select("c > " + Small_c_FW.ToString() + " AND c < " + Big_c_FW.ToString());
return dr2;
}
else
{
return dr1;
}
}
else
{
return dr;
}
你的需求是满足所有条件,怎么能把只满足部分条件的返回去呢,比如
[解决办法]
刚才没自己看
你的程序好象没问题吧