ServiceStack OrmLite SqlList <object>

时间:2017-04-13 19:05:17

标签: servicestack ormlite-servicestack

我有一个请求,它带有一个带有参数列表的存储过程名称。它可以是任何SP,因此结果可能是任何内容的列表,这就是我使用SqlList<object>的原因。

当我使用

return db.SqlList<object>(spName, cmd =>
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        if (parameters != null)
                        {
                            foreach (var p in parameters)
                            {
                                cmd.AddParam(p.Key, p.Value, ParameterDirection.Input);
                            }
                        }
                        cmd.CommandTimeout = 90;
                    });

我得到一个system.dynamic.expendo对象:{[result,1.7783336]} 在客户端,我想获得小数值,但我很难... 我在客户端上创建了一个具有十进制属性“result”的类,并尝试转换为它但它不起作用。我尝试使用该字符串并使用FromJson转换它,它也不起作用......

1 个答案:

答案 0 :(得分:1)

请参阅calling stored procedures with OrmLite推荐API的文档。

返回类型需要与存储过程返回的内容相匹配,如果SP只返回一个小数,您应该能够访问它:

var result = db.SqlScalar<decimal>("EXEC MyProc @p1 @p2", new { p1, p2 });

或者,如果您不知道它将返回什么类型,因为您可以使用object,例如:

var result = db.SqlScalar<object>("EXEC MyProc @p1 @p2", new { p1, p2 });

如果它没有返回裸标量结果,则需要匹配返回类型的形状,例如:如果它返回单行,您可以使用:

访问List<object>中的行值
var result = db.Single<List<object>>("EXEC MyProc @p1 @p2", new { p1, p2 });