[英]Returning ienumerable result from multiple query in dapper
我一直在嘗試創建使用 dapper 的 QueryMultiple 的方法。 我已經設法讓多個查詢工作,當我調試時,我可以看到數據庫中的值被返回。 但是,我想在調用API時看到Postman中的數據。 這是問題開始的地方,因為我似乎無法讓任何返回類型起作用,所以幾乎總是相同的錯誤。 錯誤幾乎總是關於“無法轉換”。 錯誤示例如下:
Error CS1503 Argument 1: cannot convert from 'string' to 'V4ReactAPI.Models.V4RequestSite.ViewModels.RequestOverview' WebApi C:\gitrepo\V4\V4ReactWebApi\Models\V4RequestSite\Repository\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?) WebApi C:\gitrepo\V4\V4ReactWebApi\Models\V4RequestSite\Repository\RequestRepo.cs 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
,以便能夠在例如 postman 中調用 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
和ownerName
的列表。 所以list1.ToString();
在這種情況下沒有任何意義,因為它是一種List<VehicleReg>
。
在添加到allQueries
之前,您需要select
字段( vehicleRegNr
來自VehicleReg
和ownerName
來自TestIgen
)。
所以這
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.