【问题标题】:Dapper Class property names with return Datatypes C#带有返回数据类型 C# 的 Dapper 类属性名称
【发布时间】:2016-07-19 17:49:30
【问题描述】:

我正在尝试使用一个参数创建服务,该参数将连接到 Oracle Db 执行复杂查询,并应以 JSON 格式返回结果。我正在检查是否有帮助的 Dapper ORM。由于查询很复杂

 SELECT 
 SICD_PRIO_CATEGORY_DESCR.DESCR, 
 STRS_SESSION3.SESSION_NUM, 
 Trunc(STRS_SESSION.START_DATE),
 STRS_SESSION3.START_DATE,
 STCD_ACT_DESCR4.DESCR AS DOSE_ACTIVITY, 
 decode(( decode(sign(( DECODE(SIGN(( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )),-1,( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) ),( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )+( STPR_OPTIONS.VALUEN )) )),-1,'Y',0,'N','N') ), 'N', Decode (( STPR_OPTIONS.VALUEN ), '1', trunc((( DECODE(SIGN(( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )),-1,( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) ),( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )+( STPR_OPTIONS.VALUEN )) )-1) /7)+1, '0', trunc(( DECODE(SIGN(( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )),-1,( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) ),( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )+( STPR_OPTIONS.VALUEN )) )/7)), 'Y', (trunc((( DECODE(SIGN(( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )),-1,( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) ),( Trunc(ILRS_DOSE.RESULT_DATE) ) - ( trunc(STPR_STD_ANML.START_DATE) )+( STPR_OPTIONS.VALUEN )) ) +1)/ 7)-1) , -999) AS RESULT_WEEK

所以在另一个问题中,我发现列名应该与类属性以及数据类型匹配。

public class StudyData
{
 public string DESCR,
 public string SESSION_NUM
}

返回类型可以是所有列的字符串,还是必须是特定的返回类型。此外,DateTime 将引用两个日期(如 18-DEC-12 和 18-DEC-12 07.52.25.977272000 AM -08:00),因为我在 C# 中看不到日期数据类型。我是 C# 编程新手,非常感谢任何帮助

【问题讨论】:

  • 问题可能出在公共字段上,这也违反了最佳实践……您应该将它们设为属性public string DESCR { get; set; }
  • 如果您只在一个地方使用此查询,建议您使用动态结果并将其映射到实际的 DTO...您是否有需要遵循的 JSON 对象的规范?发送?
  • konkked,这些是查询的一部分,需要执行的查询比较复杂。 JSON对象没有规范,只是询问我们是否可以得到JSON格式的查询响应。

标签: c# dapper


【解决方案1】:

属性的数据类型应该与列的数据类型匹配。例如,如果您的 Id 列具有 int 数据类型,那么您在类中的属性必须具有 int 数据类型。

public int Id{ get; set; }

C# 确实有 datetime 数据类型,请使用 datetime 作为保存日期数据的列的数据类型。

public datetime createdDate { get; set; }

你的情况

public class StudyData
    {
        public string DESCR { get; set; }
        public string SESSION_NUM { get; set; }
        public DateTime START_DATE { get; set; }
        public int RESULT_WEEK { get; set; }
    }

这可能是一个可能的类蓝图。希望对您有所帮助。

【讨论】:

  • 谢谢 Saket,我知道它应该是列的数据类型,例如 'Trunc(STRS_SESSION.START_DATE), STRS_SESSION.START_DATE' 的选定列是引用 START_DATE 字段的两列表中的日期时间。一个返回结果为 18-DEC-12 和另一个返回 18-DEC-12 07.52.25.977272000 AM -08:00 所以我要给这两个列日期时间吗?
  • @trx 是的,两列都使用日期时间作为数据类型。请标记为已回答,以免显示为未回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多