【发布时间】:2021-05-21 20:37:35
【问题描述】:
我正在为基于 .NETFramework = 4.7.2 的 asp.net web api2 应用程序使用 Dapper version="2.0.78"。
这是我的响应对象:
SampleResponse.cs
public class SampleResponse
{
public SampleResponse()
{
Test1 = new List<A>();
Test2 = new List<A>();
Test3 = new List<A>();
}
public bool IsValueReady
{
get;
set;
}
public List<A> Test1
{
get;
set;
}
public List<A> Test2
{
get;
set;
}
public List<A> Test3
{
get;
set;
}
}
public async Task<SampleResponse> GetDataAsync(RequestDTO value)
{
SampleResponse response = null;
using (var conn = await _dapperService.CreateConnection())
{
var data = await conn.QueryMultipleAsync("stp_FetchData", commandType: CommandType.StoredProcedure);
var response1 = await data.ReadAsync();
var response2 = await data.ReadAsync<A>();
var response3 = await data.ReadAsync<A>();
var response4 = await data.ReadAsync<A>();
response = new SampleResponse{IsValueReady = response1.FirstOrDefault(), Test1 = response2.ToList(), Test2 = response3.ToList(), Test3 = response3.ToList()};
}
return response;
}
stp_FetchData:
SELECT @pI_BIsValueReady AS IsValueReady
SELECT * FROM #Table1;
SELECT * FROM #Table2;
SELECT * FROM #Table3;
在调试下面一行
var response1 = await data.ReadAsync();
给我以下响应,我想从中读取 IsValueReady 的值
{{DapperRow, IsValueReady = 'True'}}
我想在这种情况下提取 IsValueReady 的值。
任何人都可以通过提供解决此问题的指导来帮助我吗?
【问题讨论】:
-
你试过
response1.IsValueReady吗?或response1.FirstOrDefault?.IsValueReady ?? false。我很确定没有指定类型的 Dapper 查询会返回IEnumerable<dynamic> -
感谢@Flydog57 的回复。是的,您是正确的,返回类型是 IEnumerable
。你能帮我一些关于在这种情况下如何读取值的代码示例吗?对此的任何帮助都非常感谢 -
好吧,在
IEnumerable<T>上调用FirstOrDefault会给您一个T,或者,如果集合为空,则为默认值,在本例中为null。因此,到那时,您将拥有null或dynamic。既然你知道你感兴趣的属性名称,你就可以得到它:response1.FirstOrDefault()?.IsValueReady??false应该这样做。 FirstOrDefault 调用将返回 null 或动态值。如果结果为非空,?.将调用 IsValueReady。如果它为空,它将使整个表达式为空。??表示返回值,但如果为 null,则返回false -
如果我有 {{DapperRow, IsValueReady = 'True',AnotherValue = "abc"}} 怎么样。
-
了解
dynamic的工作原理
标签: c# asp.net-web-api2 dapper