如何返回MySQL的结果';使用c#的s聚合函数?

如何返回MySQL的结果';使用c#的s聚合函数?,c#,aggregate-functions,C#,Aggregate Functions,我正在尝试编写一个泛型方法,该方法允许我返回聚合函数的值(即COUNT()、MAX()、MIN()) 问题是MIN()/MAX()可以返回datetime、date、decimal、int.所以我希望能够处理所有的值。我需要这个数字只返回一个值,而不是多个列 如何使此方法返回任何值 // query the data base public IEnumerable<T> getValue<T>(string query, List<MySqlPara

我正在尝试编写一个泛型方法,该方法允许我返回聚合函数的值
(即COUNT()、MAX()、MIN())

问题是
MIN()/MAX()
可以返回
datetime、date、decimal、int.
所以我希望能够处理所有的值。我需要这个数字只返回一个值,而不是多个列

如何使此方法返回任何值

    // query the data base
    public IEnumerable<T> getValue<T>(string query, List<MySqlParameter> pars)
    {
        double value;
        using (var conn = new MySqlConnection(conn_string))
        using (var cmd = new MySqlCommand(query, conn))
        {

            if (pars != null)
            {
                foreach (MySqlParameter p in pars)
                {
                    cmd.Parameters.Add(p);
                }
            }

            conn.Open();
            try
            {
                value = Convert.ToDouble(cmd.ExecuteScalar());

            } catch(Exception ex){

                MessageBox.Show(ex.ToString(), "SQL Error", MessageBoxButtons.OK);
                value = -1;

            } finally {
                conn.Close();
            }

        }

        return value;
    }
//查询数据库
公共IEnumerable getValue(字符串查询、列表PAR)
{
双重价值;
使用(var conn=new MySqlConnection(conn_string))
使用(var cmd=newmysqlcommand(query,conn))
{
如果(PAR!=null)
{
foreach(PAR中的mysqlp参数)
{
cmd.Parameters.Add(p);
}
}
conn.Open();
尝试
{
value=Convert.ToDouble(cmd.ExecuteScalar());
}捕获(例外情况除外){
Show(例如ToString(),“SQL错误”,MessageBoxButtons.OK);
值=-1;
}最后{
康涅狄格州关闭();
}
}
返回值;
}

声明为
T
,并将
ExecuteScalar
的结果强制转换为
T

T value;
// ...
try
{
     value = (T)cmd.ExecuteScalar();
} 
catch(Exception ex)
{
    MessageBox.Show(ex.ToString(), "SQL Error", MessageBoxButtons.OK);
    value = default(T);

}
finally 
{
     conn.Close();
}
public T getValue(字符串查询,列表参数){
//您现有的代码
对象值=cmd.ExecuteScalar();
//此行将更改为正确的类型。您仍然需要处理null
//和各种可为空的类型,如果您使用这些
返回Convert.ChangeType(value,typeof(T));
}
//使用
int cnt=getValue(查询,参数);

我在
返回值处遇到错误
无法将类型“T”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换(是否缺少转换?
另外,
default(T)
do做什么?@Mike您需要将返回类型更改为T。default(T)根据类型为您提供默认值。如果是引用类型,则返回null;如果是值类型,则将所有成员设置为其默认值。尝试使用它时,我会出错。下面是我如何使用它的
intcnt=(int)(db.getValue(sSQL,parms1))并且我正在传递一个COUNT(*)函数
错误1无法从用法推断方法“POS.dbConnetion.getValue(string,System.Collections.Generic.List)”的类型参数。请尝试显式指定类型参数
谢谢。我在尝试使用该方法时出错。下面是我如何使用它的int cnt=(int)db.getValue(sSQL,parms1);我正在传递一个COUNT(*)函数错误1。无法从用法推断方法“POS.dbConnetion.getValue(string,System.Collections.Generic.List)”的类型参数。尝试显式指定类型参数查看更新的代码。请注意,现在返回的是T,而不是IEMUNERABLETH,它更正了错误,但不是I get SQL错误系统。InvalidCastException:指定的强制转换不是值…getValue[T](字符串查询,列表1部分)。。。。
public T getValue<T>(string query, List<SqlParameter> param) {

    // your existing code

    object value = cmd.ExecuteScalar();

    // This line will change the to the right type. You still need to handle null
    // and various Nullable type if you use these
    return Convert.ChangeType(value, typeof(T));
}

// to use
int cnt = getValue<int>(query, params);