代码之家  ›  专栏  ›  技术社区  ›  lat94 Sadiq

将查询结果映射到类型化列表

  •  0
  • lat94 Sadiq  · 技术社区  · 7 年前

    下面是我如何得到结果(示例):

    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<ReportsModel> 无需逐行提取( report.Id_product = reader["ID_PRODUCT"] )?我知道可能有一种方法可以解决这个问题,使用lambda(箭头函数)和Linq之类的东西。

    1 回复  |  直到 7 年前
        1
  •  1
  •   lat94 Sadiq    7 年前

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