c# - 从 dapper 中的多个查询返回可枚举的结果
问题描述
我一直在尝试创建使用 dapper 的 QueryMultiple 的方法。我已经设法让多个查询工作,当我调试时,我可以看到数据库中的值被返回。但是,我想在调用 API 时查看 Postman 中的数据。这是问题开始的地方,因为我似乎无法让任何返回类型工作,它几乎总是相同的错误。该错误几乎总是与“无法转换”有关。错误示例如下:
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; } = "";
}
(整个模型类的名称是RequestOverview
)
现在我在自己的类中拥有的方法:
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
如前所示)。
基本上,我需要以某种方式返回var vehicles
和var test
返回,以便能够在例如在邮递员中调用 api 时获取要显示的数据。
我也尝试过这种方法,但我再次无法返回数据:
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;
}
有人对如何返回数据有任何想法吗?
[更新]我尝试了以下方法来避免转换错误,但是当我在 Postman 中尝试时它仍然没有返回任何数据:
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;
}
解决方案
如果我理解正确,您想返回vehicleRegNr
and的列表ownerName
。所以list1.ToString();
在这种情况下没有任何意义,因为它是List<VehicleReg>
.
在添加到您的. select
_vehicleRegNr
VehicleReg
ownerName
TestIgen
allQueries
所以这
allQueries.Add(list1.ToString());
allQueries.Add(list2.ToString());
应该
allQueries.AddRange(list1.Select(i => i.vehicleRegNr));
allQueries.AddRange(list2.Select(i => i.ownerName));
而且,如果您想从 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();
}
推荐阅读
- r - R - 将字符串添加到列表
- symfony - DoctrineMigrationsBundle 3.0.1:元数据存储不是最新的
- python - 如何在 Django 中测试模型字段类型?
- python - 如果第一个值重复,如何从 csv 中删除下一行
- c# - 为什么 XElement(XName, Object[]) 对这些 XElement 集合的处理方式不同?
- logging - 仅当任务失败时 Airflow View Logs 错误“未提供主机”,否则日志可见
- javascript - route.params 未在我的 React.js 应用程序中正确传递
- php - 在 MySQL 中显示 ID 表中的值范围
- reactjs - 同一域在云代工厂 (PCF) 中上传不同的应用程序
- excel - 在单元格中使用日期 + 时间的条件格式 TODAY()