根据 Dapper 文档,您可以使用以下代码从 Dapper 返回一个动态列表:
我希望能够做到以下几点: 1. 获取返回的字段名称和数据类型列表。 2. 使用字段名称进行迭代,并以以下方式获取数据:
所以我应该能够得到result[0].Items[0].table.FieldNames[0]的结果,并返回"Id"。
var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
((int)rows[0].A)
.IsEqualTo(1);
((int)rows[0].B)
.IsEqualTo(2);
((int)rows[1].A)
.IsEqualTo(3);
((int)rows[1].B)
.IsEqualTo(4);
但是如果你必须知道字段名称和字段的数据类型,那动态有什么用呢?
如果我有:
var result = Db.Query("Select * from Data.Tables");
我希望能够做到以下几点: 1. 获取返回的字段名称和数据类型列表。 2. 使用字段名称进行迭代,并以以下方式获取数据:
result.Fields
["Id", "Description"]
result[0].values
[1, "This is the description"]
这将允许我获取
result[0].["Id"].Value
将返回结果1,类型为例如Int 32。
result[0].["Id"].Type --- what datattype is the value returned
result[0].["Description"]
调用该方法会返回类型为字符串的结果"This is the description"。
我发现results[0].table中有一个dapperrow对象,其中包含字段名称数组,还有一个result.values对象[2],其中包含值,但无法访问。如果将表格列名添加到监视器中,则可以获取ID。自动生成的监视器如下:
(new System.Collections.Generic.Mscorlib_CollectionDebugView<Dapper.SqlMapper.DapperRow>(result as System.Collections.Generic.List<Dapper.SqlMapper.DapperRow>)).Items[0].table.FieldNames[0] "Id" string
所以我应该能够得到result[0].Items[0].table.FieldNames[0]的结果,并返回"Id"。