将查询结果映射到类型列表
Map query result to typed list
这是我得到结果的方式(示例):
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from table_name t";
//retrieve the result
OracleDataReader reader = cmd.ExecuteReader();
然后我有一个 POCO class 匹配查询的字段(逐行)。话虽如此,我创建了一个列表:
List<ReportsModel> reports= new List<ReportsModel>();
然后我遍历 reader
:
while (reader.Read())
{
//single report that I will pass to the colletion of reports
ReportsModel report= new ReportsModel();
report.Id_product = reader["ID_PRODUCT"] == DBNull.Value ? 0 : Convert.ToInt32(reader["ID_PRODUCT"]);
//passing report to reports
reports.Add(report );
}
问题是:我的 POCO class 有大约 300 个字段(查询 returns 也有相同的数量)。如何将我的结果集 (OracleDataReader reader
) 映射到我的 List<ReportsModel>
而不必逐行获取 (report.Id_product = reader["ID_PRODUCT"]
)?我知道可能有一种方法可以使用 lambda(箭头函数)和 Linq 之类的东西来解决它。
我采纳了@mjwills 关于使用 Dapper 的建议,它解决了我的问题,这是我的代码:
string sql = "select * from table t ";
//conn changed to IDbConnection, so I could use Dapper
var reports= conn.Query<ReportsModel>(sql).ToList();
仅此而已,无需编写代码来迭代 OracleDataReader 或其他任何东西! Dapper 处理得惊人 \o
有用: Dapper Example
这是我得到结果的方式(示例):
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from table_name t";
//retrieve the result
OracleDataReader reader = cmd.ExecuteReader();
然后我有一个 POCO class 匹配查询的字段(逐行)。话虽如此,我创建了一个列表:
List<ReportsModel> reports= new List<ReportsModel>();
然后我遍历 reader
:
while (reader.Read())
{
//single report that I will pass to the colletion of reports
ReportsModel report= new ReportsModel();
report.Id_product = reader["ID_PRODUCT"] == DBNull.Value ? 0 : Convert.ToInt32(reader["ID_PRODUCT"]);
//passing report to reports
reports.Add(report );
}
问题是:我的 POCO class 有大约 300 个字段(查询 returns 也有相同的数量)。如何将我的结果集 (OracleDataReader reader
) 映射到我的 List<ReportsModel>
而不必逐行获取 (report.Id_product = reader["ID_PRODUCT"]
)?我知道可能有一种方法可以使用 lambda(箭头函数)和 Linq 之类的东西来解决它。
我采纳了@mjwills 关于使用 Dapper 的建议,它解决了我的问题,这是我的代码:
string sql = "select * from table t ";
//conn changed to IDbConnection, so I could use Dapper
var reports= conn.Query<ReportsModel>(sql).ToList();
仅此而已,无需编写代码来迭代 OracleDataReader 或其他任何东西! Dapper 处理得惊人 \o
有用: Dapper Example