sql - NHibernate LINQ BIGINT 类型转换

标签 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_

如果Number列无论如何都是bigint,为什么还需要转换?

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

<class name="NhMappingTest.Person, NhMappingTest">
      <id name="Id"><generator class="increment" /></id>
      <property name="Number" />
</class>

最佳答案

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

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

因此,代码会盲目地转换结果。

关于sql - NHibernate LINQ BIGINT 类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720105/

相关文章:

mysql - 在Create Table语句中使用用户定义变量指定varchar长度

Python:按不同值对单列进行分组

c# - NHibernate - 在删除时将引用设置为空

c# - 在 LINQ-to-NHibernate 或 LINQ 中比较枚举时有什么考虑吗?

c# - 图像数据类型 SQL Server 2008 C# 数据类型

nhibernate - (流畅)NHibernate : One entity composed of fields from different tables

sql - 如何将非连续记录的行号重置为 1

c# - 带有 Windows Azure SQL 数据库的 SignalR Hub

sql-server - 免费的 SQL Server 数据库管理器

sql-server - 包含 NULL 的 SQL 连接