C# 从Int32到DateTime的InvalidCast异常-但在哪里?

C# 从Int32到DateTime的InvalidCast异常-但在哪里?,c#,nhibernate,C#,Nhibernate,我正在通过NHibernate使用以下原始SQL代码,我找不到更多的示例代码可与之比较,但它使用了InvalidCastException Int32 to DateTime var query = session.CreateSQLQuery("SELECT COUNT(*), MIN(Created), MAX(Created)" + " FROM MyStuff WHERE Created < :deadline

我正在通过NHibernate使用以下原始SQL代码,我找不到更多的示例代码可与之比较,但它使用了InvalidCastException Int32 to DateTime

var query = session.CreateSQLQuery("SELECT COUNT(*), MIN(Created), MAX(Created)" + 
                                   " FROM MyStuff WHERE Created < :deadline")
                   .SetDateTime("deadline", deadline)
                   .UniqueResult();

现在,我非常确定DateDate实际上是DateTime类型,该方法甚至不会采用任何其他类型,而且据我所知,我不会对结果强制使用类型,所以这种转换从何而来?

每当我们希望NHibernate从DB加载数据时,我们必须考虑事后结果处理。通常,使用别名来正确地帮助找出记录集DB中的哪个值属于结果集C中的哪个值

因此,将此简单调整作为Alias是一种方法:

var query = session
    .CreateSQLQuery("SELECT COUNT(*)     AS Count,   " +
                   "        MIN(Created) AS MinDate, " +
                   "        MAX(Created) AS MaxDate  " +
                   " FROM MyStuff WHERE Created < :deadline")                
    .SetDateTime("deadline", deadline)
    ;
var result = query
    .UniqueResult<object[]>()
    ;

var count   = (int)     result[0];
var minDate = (DateTime)result[1];
var maxDate = (DateTime)result[2];
结果声明:

var result = query
    .SetResultTransformer(Transformers.AliasToBean<ResultDto>())
    .UniqueResult<ResultDto>()

在sql端执行什么查询?试着用分析器检查一下。
var result = query
    .SetResultTransformer(Transformers.AliasToBean<ResultDto>())
    .UniqueResult<ResultDto>()