如何使用dapper通过查询对象返回整数值

时间:2013-09-10 04:31:01

标签: c# dapper

使用下面的方法我试图返回一个intger,它由存储过程返回,它返回值0或大于零。根据我的理解,当数据返回时,它将是一个字典(不确定),因为我试图返回一个整数。我怎么能做到这一点。下面的代码是不完整的,注释中的代码是我最初做的,我意识到我可以用很简单的方式重写相同的代码。我把它们都留在那里所以我错了,有人可以解决我的问题。

public int Exists(string plan)
{
    using (var connection = new SqlConnection(Connection))
    {
        connection.Open();
       var parameters = new DynamicParameters();
       //parameters.Add("@Plan", plan, DbType.String,
           //ParameterDirection.Input, null);
           //I guess I can directly pass param but not sure how ??

        var data=connection.Query("storeProcmem_Plan", new{ ? ?},
               CommandType.StoredProcedure);

        //how to return an integer               
        int myvalue= data ???                


        connection.Close();
        return Convert.ToInt32(data);

1 个答案:

答案 0 :(得分:13)

假设您的参数是固定的(它们通常用于存储过程 - 您需要DynamicParameters的主要时间是,如果您在= -fly上生成SQL以匹配某些复杂的灵活查询) - 那么参数方面很简单:

new { Plan = plan }

这使用编译器的匿名类型功能来定义参数应该命名为Plan,类型为string,并且值取自变量plan

如果我们假设存储过程select是一行中的结果(而不是return,需要单独编码),那么最简单的方法是:

var myvalue = connection.Query<int>("storeProcmem_Plan", new { Plan = plan },
           CommandType.StoredProcedure).First();

通用与非通用API在类型化结果和dynamic结果之间切换 - 两者都有用,但<int>似乎在这里合适。 .First()是标准LINQ操作,它通过选择第一个值(并在没有异常的情况下抛出异常)从IEnumerable<T>转换为T - 您也可以使用{{1} }},Single()FirstOrDefault()取决于您想要的确切语义。

为了完整性,如果您使用的是非通用API,那么您需要知道列名称 - 基本上就是:

SingleOrDefault()