【问题标题】:Map query result to typed list将查询结果映射到类型列表
【发布时间】:2018-08-16 20:40:58
【问题描述】:

这是我获得结果的方式(示例):

OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from table_name t";     
//retrieve the result
OracleDataReader reader =  cmd.ExecuteReader();

然后我有一个与查询字段匹配的 POCO 类(逐行)。话虽如此,我创建了一个列表:

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 类有大约 300 个字段(查询也返回相同的数量)。如何将我的结果集 (OracleDataReader reader) 映射到我的 List&lt;ReportsModel&gt; 而不必逐行获取 (report.Id_product = reader["ID_PRODUCT"])?我知道可能有一种方法可以使用 lambda(arrow function) 和 Linq 之类的东西来解决它。

【问题讨论】:

  • HomeMadeSolution :循环遍历阅读器中的所有列,使用与列名匹配的ReportsModel 的反射查找属性并为其赋值。
  • 或者使用任何 ORM...

标签: c# oracle linq lambda resultset


【解决方案1】:

我接受了@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多