【发布时间】:2021-09-28 15:27:09
【问题描述】:
我一直在尝试创建使用 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();
}
这会直接抛出一个错误(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;
}
【问题讨论】:
-
RequestOverview长什么样子? -
如错误所述,您尝试返回
List<string>,其中testa方法期望返回IEnumerable<RequestOverview>的类型 -
您更新的代码不会成功构建。请简化您的问题
-
@SelimYildiz 嗯,它为我成功构建了......但基本上,我想使用异步任务(实际上以任何形式,字符串/列表/布尔/ienumerable)和queryMultiple,但我会喜欢从查询中获取结果/数据以在 Postman 中打印,使用更新的代码我可以在调试时看到结果,但在 postman 中它只是返回 200 ok,没有实际数据
-
看来
allQueries.Add(list1.ToString()); allQueries.Add(list2.ToString());应该类似于allQueries.AddRange(list1.Select(i=>i.vehicleRegNr).ToList()); allQueries.AddRange(list2.Select(i=>i.ownerName).ToList());
标签: c# sql asp.net-core dapper