C# 如何从c中的ReadFirstOrDefaultAsync中的多个变量返回值

C# 如何从c中的ReadFirstOrDefaultAsync中的多个变量返回值,c#,model-view-controller,dapper,C#,Model View Controller,Dapper,这是我的方法。我想返回变量的值并将其分配给模型 如何从变量item1和item2返回值 public async Task <(int, int)> GetCount(int CustId, string userId) { _log.Info($"Enter- GetCount"); const string query = @" Select count(*) from Products

这是我的方法。我想返回变量的值并将其分配给模型

如何从变量item1和item2返回值

public async Task <(int, int)> GetCount(int CustId, string userId)
{
    _log.Info($"Enter- GetCount");
    const string query = @" Select count(*) from Products
                            Select count(*) from Units";
    using (IDbConnection myConnection = 
    _getConnection.GetConnection(GetConnectionStringFromDict(userId)))
    {
        _log.Info($"Exit- GetCount");
        using (var multi = await myConnection.QueryMultipleAsync(query, new { CustId 
        }).ConfigureAwait(false))
        {
            var item1 = multi.ReadFirstOrDefaultAsync<int>();
            var item2 = multi.ReadFirstOrDefaultAsync<int>();
        }
    }
    using (IDbConnection myConnection = 
    _getConnection.GetConnection(GetConnectionStringFromDict(userId)))
    {
        _log.Info($"Exit- GetCount");
        return (await myConnection.QueryAsync<(int, int)>(query, new { CustId 
        }).ConfigureAwait(false)).FirstOrDefault();
    }
}

可以使用元组从函数调用返回多个项

public async Task<Tuple<int, int>> GetCount(int CustId, string userId) {
  ...
  return new Tuple<int, int>(item1, item2);
}

参考:

只需将ValueTuple放在括号中,即可返回它们

静态int,int测试 { INTA=0,b=1; 返回a、b; } 使用ReadFirstOrDefaultAsync将返回两次产品计数

您需要以集合的形式读取结果,集合可以转换为元组:

public async Task <(int, int)> GetCount(int CustId, string userId)
{
    _log.Info($"Enter- GetCount");
    const string query = @" Select count(*) from Products
                            Select count(*) from Units";
    using (IDbConnection myConnection = _getConnection
        .GetConnection(GetConnectionStringFromDict(userId)))
    {
        _log.Info($"Exit- GetCount");
        using (var multi = await myConnection.QueryMultipleAsync(query, new { CustId })
            .ConfigureAwait(false))
        {
            var items = await multi.ReadAsync<int>();
            return (items.First(), items.Last());
        }
    }
}

如果要将item1和item2作为元组返回,可以使用returnitem1和item2。不过,目前还不清楚在这种情况下,您现有的报税表会发生什么变化!无关:您似乎没有在查询中使用CustId?是吗?从可读性的角度来看:是的,您可以返回一个元组。但我实际上建议返回一个ResultClass或Struct,或者从最近开始:Record,这样您就可以将属性命名为ProductScont和UnitScont。。。“但这是相当固执己见的。@Fildor:我错过了基于custID的添加,但我不知道如何从item1和item1返回值。”item2@SuvarnaS张贴你尝试过的东西,以及让你觉得自己运气不佳的东西。不幸的是,我的读心设备的电池今天没电了,所以你必须做艰苦的工作,并告诉我出了什么问题:这会给我一个错误,说不能隐式转换类型Systm.TupleThen你混淆了tuple和task:P它应该是task而不是tuple。我没有混淆。。。我添加了Jason提供的内容。我收到了错误。很抱歉Suvarna,我更新了答案。这至少可以在我的电脑上编译。我试过,但没有luck@SuvarnaS运气不足以形容失败。你凭什么认为自己运气不好?编译器错误?运行时异常?错误的结果?我在这里得到两个变量的值。但不知道如何返回值。var item=multi.ReadFirstOrDefaultAsync;var item1=multi.ReadFirstOrDefaultAsync@但不知道如何返回值。这是答案的一部分:归还物品。首先,物品。最后;你到底有什么不明白的?