获取从 dapper .QueryMultiple 方法返回的 resultsets/Tables 的计数

Get the count of resultsets/Tables returned from dapper .QueryMultiple Method

在使用 Dapper 进行多个查询时:

 var result = sqlConnection.QueryMultiple(query, Parameters, commandType: commandType);

如何获取查询返回的 table 计数?它有两个 .Read() 方法的重载实现,每次调用时,都会移动到下一个可用结果集(No result.Count() 属性)。最终我想将该数字放入一个循环中以迭代与从查询返回的 table 的数量一样多的次数。

var reader = this.DbConnection.QueryMultipleAsync(sql, Params, commandType: CommandType.StoredProcedure).Result; 

if(reader.IsConsumed == false)
    {
        DeviceTypeReport = reader?.ReadAsync<dynamic>().Result;
    }

这可能是您正在寻找的内容,希望对您有所帮助。

考虑以下覆盖所有情况的方法

protected List<object> ExecuteMultiQuery<A, B, C, D, E, F, G, H, I, J>(string procedureName, DynamicParameters param = null)

    {
        List<object> result = new List<object>();
        using (var connection = new SqlConnection(ConnectionManager.ConnectionString))
        {
            try
            {
                connection.Open();
                using (var multi = connection.QueryMultiple(procedureName, param, commandType: CommandType.StoredProcedure, commandTimeout: 120))
                {
                    var varA = multi.Read<A>();
                    if (varA != null) { result.Add(varA.ToList()); }
                    var varB = multi.Read<B>();
                    if (varB != null) { result.Add(varB.ToList()); }
                    var varC = multi.Read<C>();
                    if (varC != null) { result.Add(varC.ToList()); }
                    var varD = multi.Read<D>();
                    if (varD != null) { result.Add(varD.ToList()); }
                    var varE = multi.Read<E>();
                    if (varE != null) { result.Add(varE.ToList()); }
                    var varF = multi.Read<F>();
                    if (varF != null) { result.Add(varF.ToList()); }
                    var varG = multi.Read<G>();
                    if (varG != null) { result.Add(varG.ToList()); }
                    var varH = multi.Read<H>();
                    if (varH != null) { result.Add(varH.ToList()); }
                    var varI = multi.Read<I>();
                    if (varI != null) { result.Add(varI.ToList()); }
                    var varJ = multi.Read<J>();
                    if (varJ != null) { result.Add(varJ.ToList()); }

                    //if (varA != null) { result.Add(varA.ToList()); }
                    //if (resultSets > 1) { result.Add(multi.Read<B>().ToList()); }
                    //if (resultSets > 2) { result.Add(multi.Read<C>().ToList()); }
                    //if (resultSets > 3) { result.Add(multi.Read<D>().ToList()); }
                    //if (resultSets > 4) { result.Add(multi.Read<E>().ToList()); }
                    //if (resultSets > 5) { result.Add(multi.Read<F>().ToList()); }
                    //if (resultSets > 6) { result.Add(multi.Read<G>().ToList()); }
                    //if (resultSets > 7) { result.Add(multi.Read<H>().ToList()); }
                    //if (resultSets > 8) { result.Add(multi.Read<I>().ToList()); }
                    //if (resultSets > 9) { result.Add(multi.Read<J>().ToList()); }    
                    return result;
                }
            }
            catch (System.Exception e)
            {
                string message = e.Message;
            }
        }

        return result;
    }

这可能是您正在寻找的内容,希望对您有所帮助。

    List<dynamic> data = new List<dynamic>();
    while (reader.IsConsumed == false)
    {
       data.Add(await reader?.ReadAsync<dynamic>());
    }
    int totalRecordSet = data.Count;

public List NotificationExecuteMultiple(OutdoorRequest objreq, IConfiguration 配置)

    {
        var lst = new List<dynamic>();
        using (DbConnection connection = new MySqlConnection(configuration.GetConnectionString("SquareHrConn")))
        {
            using (var dr = connection.QueryMultiple(ProcedureName, GetParamenter(objreq), commandType: CommandType.StoredProcedure))
            {
                while (dr.IsConsumed == false)
                {
                    lst.Add(dr.Read());
                }
            }
        }
        return lst;
    }