从 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 vehicles
和 var 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 vehicleRegNr
和 ownerName
的列表。所以 list1.ToString();
在这种情况下没有任何意义,因为它是 List<VehicleReg>
.
的一种类型
在添加到 allQueries
之前,您需要 select
个字段(VehicleReg
中的 vehicleRegNr
和 TestIgen
中的 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();
}
见
我一直在尝试创建使用 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 vehicles
和 var 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 vehicleRegNr
和 ownerName
的列表。所以 list1.ToString();
在这种情况下没有任何意义,因为它是 List<VehicleReg>
.
在添加到 allQueries
之前,您需要 select
个字段(VehicleReg
中的 vehicleRegNr
和 TestIgen
中的 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();
}
见