InvalidCast异常从Int32到DateTime -但在哪里
本文关键字:在哪里 DateTime 异常 Int32 InvalidCast | 更新日期: 2023-09-27 18:13:23
我通过NHibernate使用以下原始SQL代码,我找不到更多的示例代码进行比较,但它爆炸与InvalidCastException (Int32到DateTime)
var query = session.CreateSQLQuery("SELECT COUNT(*), MIN(Created), MAX(Created)" +
" FROM MyStuff WHERE Created < :deadline")
.SetDateTime("deadline", deadline)
.UniqueResult();
现在,我很确定截止日期实际上是DateTime类型(该方法甚至不会采取任何其他类型显然),据我所知,我不强制类型的结果,所以这个转换是从哪里来的?
每当我们想让NHibernate从DB加载数据时,我们必须考虑事后结果处理。大多数情况下,混叠是为了正确地帮助找出记录集(DB)中的哪个值属于结果集(c#)中的哪个值。
所以这个简单的调整"AS别名"是可行的:
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];
一旦我们这样做了,我们可以使它更容易,使用DTO
public class ResultDto
{
public virtual int Count { get; set; }
public virtual DateTime MinDate { get; set; }
public virtual DateTime MaxDate { get; set; }
}
result语句:
var result = query
.SetResultTransformer(Transformers.AliasToBean<ResultDto>())
.UniqueResult<ResultDto>()