如何在NHibernate Criteria Query中截断浮点值?

问题描述 投票:1回答:1

我们的数据库中存储了一个值。此值的数据类型为float

我们的应用程序使用NHibernate Criteria来查询数据库。

查询此值时,我们希望过滤一个值,例如66.66。

数据库将包含值66.6666667

因此,在查询时,我们想要将值截断(而不是向上舍入)到两个位置,这样如果我们在66.66上查询,我们将获得截断值等于66.66的所有记录。

在SQL Server中,我们可以使用以下查询来截断值:

CAST(ROUND(CAST([Score] AS DECIMAL (13,5)), 2, 1) AS FLOAT) = 66.66

有没有办法使用NHibernate标准进行相同的查询?

nhibernate nhibernate-criteria
1个回答
0
投票

您可以使用Projections.SqlFunctionSQLFunctionTemplate在投影中包含您想要的任何截断逻辑:

//Use ?1, ?2, ?3... for arguments in template
private static readonly SQLFunctionTemplate TruncateTemplate = 
    new SQLFunctionTemplate(NHibernateUtil.Double, "CAST(ROUND(CAST( ?1 AS DECIMAL (13,5)), 2, 1) AS FLOAT)");

public static IProjection TruncateProjection(IProjection value)
{
    return Projections.SqlFunction(TruncateTemplate, NHibernateUtil.Double, value);
}

以及Criteria中的使用示例:

session
    .CreateCriteria<Entity>()
    .SetProjection(TruncateProjection(Projections.Property("FloatProp")))
    .Add(
        Restrictions.Eq(
            TruncateProjection(Projections.Property("FloatProp")),
            66.66))
    .List<double>();
© www.soinside.com 2019 - 2024. All rights reserved.