NHibernate LINQ BIGINT铸造

时间:2012-03-15 12:53:29

标签: sql sql-server nhibernate casting max

我试图理解这个实体的NHibernate SQL输出:

public class Person
{
    public virtual long Id { get; set; }
    public virtual long Number { get; set; }
}

当我写:

var maxNumber = s.Query<Person>().Max(p => p.Number);

生成的SQL如下所示:

select cast(max(person0_.Number) as BIGINT) as col_0_0_ from Person person0_

如果Numberbigint<class name="NhMappingTest.Person, NhMappingTest"> <id name="Id"><generator class="increment" /></id> <property name="Number" /> </class> ,为什么需要投射?

我正在使用NHibernate 3.2,SQL Server 2008 R2,映射定义如下:

{{1}}

1 个答案:

答案 0 :(得分:1)

不是需要。这是一个实现细节:

protected HqlTreeNode VisitNhMax(NhMaxExpression expression)
{
    return _hqlTreeBuilder.Cast(
        _hqlTreeBuilder.Max(
            VisitExpression(expression.Expression).AsExpression()), 
            expression.Type);
}

所以,代码正在盲目地投射结果。