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

求Dataset.select的一个个高效率的算法,该怎么解决

2012-01-08 
求Dataset.select的一个个高效率的算法我最近在开发一个wince 5.0下的程序,用VS 2005 C#开发。问题是这样的

求Dataset.select的一个个高效率的算法
我最近在开发一个wince 5.0下的程序,用VS 2005 C#开发。
问题是这样的:
这个是我写的一个查询dataset的函数。这个函数搜索的效率比较低,虽然效率比较低,但搜索出来的结果却非常准确。

C# code
/// <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;            }                    }

上面这个算法效率比较低,但搜索结果却非常准确,由于是在WINCE设备上运行,所以程序在执行起来比较缓慢。

下面是我改进过的算法:

C# code
/// <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;
}

你的需求是满足所有条件,怎么能把只满足部分条件的返回去呢,比如
[解决办法]
刚才没自己看

你的程序好象没问题吧

热点排行