从 dapper 中的多个查询返回 ienumerable 结果

Returning ienumerable result from multiple query in dapper

我一直在尝试创建使用 dapper 的 QueryMultiple 的方法。我已经设法使多个查询工作,并且在调试时我可以看到数据库中的值得到 returned。但是,我想在调用 API 时在 Postman 中查看数据。这是问题开始的地方,因为我似乎无法让任何 return 类型工作,它几乎总是相同的错误。错误几乎总是与“无法转换”有关。错误示例如下:

Error   CS1503  Argument 1: cannot convert from 'string' to \RequestRepo.cs 45  Active

Error   CS0266  Cannot implicitly convert type 'System.Collections.Generic.List<string>' to 'System.Collections.Generic.IEnumerable<V4ReactAPI.Models.V4RequestSite.ViewModels.RequestOverview>'. An explicit conversion exists (are you missing a cast?) 90    Active

控制器看起来像:

    [HttpGet]
    public async Task<IActionResult> testa(RequestOverview model)
    {

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        try
        {
            await _request.testa(model);
        }
        catch (Exception ex)
        {

            return BadRequest(ex.Message);
        }
        return Ok();
    }

型号:

public class VehicleReg
{
    public string vehicleRegNr { get; set; } = "";
}

public class TestIgen
{
    public string ownerName { get; set; } = "";
}

(整个模型的名字class是RequestOverview)

现在是我自己的方法 class:

    public async Task<IEnumerable<RequestOverview>> testa(RequestOverview model)
    {

        string query = "SELECT TOP 5 RegNumber as vehicleRegNr FROM [dbo].[Vehicle];
        SELECT TOP 5 Name as ownerName FROM [dbo].[Customer];";

        var result = _sqlconnection.QueryMultiple(query);
        var vehicles = result.Read<VehicleReg>();
        var test = result.Read<TestIgen>();
        List<string> allQueries = new List<string>();

        foreach (var item in vehicles)
        {
            allQueries.Add(item.vehicleRegNr);
        }

        foreach (var item in test)
        {
            allQueries.Add(item.ownerName);

        return allQueries.ToList();
    }

这直接抛出一个ERROR(如前所示的CS0266)。

基本上,我需要以某种方式 return var vehiclesvar test returned,以便能够在调用api 例如邮递员。

我也尝试过这种方法,但我再次遇到问题return处理数据:

 public async Task<bool> Test()
        {

          string query = "SELECT TOP 5 RegNumber as vehicleRegNr FROM [dbo].[Vehicle];
          SELECT TOP 5 Name as ownerName FROM [dbo].[Customer];";

            var result = _sqlconnection.QueryMultiple(query);

            using (var multi = _sqlconnection.QueryMultiple(query, null))
            {
              List<VehicleReg> list1 = multi.Read<VehicleReg>().AsList();
              List<TestIgen> list2 = multi.Read<TestIgen>().AsList();
            }

            return true;
        }

有人对如何 return 数据有任何想法吗?

[更新] 我已经尝试了以下方法来避免转换错误,但是当我在 Postman 中尝试时它仍然没有 returning 任何数据:

public async Task<List<string>> Test()
{

  string query = "SELECT TOP 5 RegNumber as vehicleRegNr FROM [dbo].[Vehicle];
  SELECT TOP 5 Name as ownerName FROM [dbo].[Customer];";
    List<string> allQueries = new List<string>();
    using (var multi = _sqlconnection.QueryMultiple(query, null))
   {
        //List<string> allQueries = new List<string>();
        List<VehicleReg> list1 = multi.Read<VehicleReg>().AsList();
        List<TestIgen> list2 = multi.Read<TestIgen>().AsList();
        //return list1.ToList();
        allQueries.Add(list1.ToString());
        allQueries.Add(list2.ToString());
    }
    return allQueries;
}

如果我没理解错的话,您想要 return vehicleRegNrownerName 的列表。所以 list1.ToString(); 在这种情况下没有任何意义,因为它是 List<VehicleReg>.

的一种类型

在添加到 allQueries 之前,您需要 select 个字段(VehicleReg 中的 vehicleRegNrTestIgen 中的 ownerName)。 =26=]

所以这个

allQueries.Add(list1.ToString());
allQueries.Add(list2.ToString());

应该是

allQueries.AddRange(list1.Select(i => i.vehicleRegNr));
allQueries.AddRange(list2.Select(i => i.ownerName));

而且如果你想 return 来自 API 的值,你需要使用 OK 给定结果如下:

[HttpGet]
public async Task<IActionResult> testa(RequestOverview model)
{

    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    try
    {
        return Ok(await _request.testa(model);
    }
    catch (Exception ex)
    {
        return BadRequest(ex.Message);
    }
    return Ok();
}