如何在NHibernate条件查询中截断浮点值?
我们的数据库中存储了一个值。此值的数据类型为如何在NHibernate条件查询中截断浮点值?,nhibernate,nhibernate-criteria,Nhibernate,Nhibernate Criteria,我们的数据库中存储了一个值。此值的数据类型为浮点 我们的应用程序使用NHibernate标准来查询数据库 当查询这个值时,我们想过滤一个值,比如66.66 数据库将包含值66.667 因此,在查询时,我们希望将值截断(而不是四舍五入)到两个位置,这样,如果我们查询66.66,我们将得到截断值等于66.66的所有记录 在SQL Server中,我们可以使用以下查询截断该值: CAST(ROUND(CAST([Score] AS DECIMAL (13,5)), 2, 1) AS FLOAT) =
浮点
我们的应用程序使用NHibernate标准来查询数据库
当查询这个值时,我们想过滤一个值,比如66.66
数据库将包含值66.667
因此,在查询时,我们希望将值截断(而不是四舍五入)到两个位置,这样,如果我们查询66.66,我们将得到截断值等于66.66的所有记录
在SQL Server中,我们可以使用以下查询截断该值:
CAST(ROUND(CAST([Score] AS DECIMAL (13,5)), 2, 1) AS FLOAT) = 66.66
是否有任何方法可以使用NHibernate条件执行相同的查询?您可以使用
Projections.SqlFunction
和SQLFunctionTemplate
来包装投影中所需的任何截断逻辑:
//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);
}
以及在标准中使用的示例:
session
.CreateCriteria<Entity>()
.SetProjection(TruncateProjection(Projections.Property("FloatProp")))
.Add(
Restrictions.Eq(
TruncateProjection(Projections.Property("FloatProp")),
66.66))
.List<double>();
会话
.CreateCriteria()
.SetProjection(TruncateProjection(Projections.Property(“FloatProp”)))
.添加(
限制条件(
TruncateProjection(Projections.Property(“FloatProp”),
66.66))
.List();
您可以在投影中使用Projections.SqlFunction
和SQLFunctionTemplate
包装任何截断逻辑:
//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);
}
以及在标准中使用的示例:
session
.CreateCriteria<Entity>()
.SetProjection(TruncateProjection(Projections.Property("FloatProp")))
.Add(
Restrictions.Eq(
TruncateProjection(Projections.Property("FloatProp")),
66.66))
.List<double>();
会话
.CreateCriteria()
.SetProjection(TruncateProjection(Projections.Property(“FloatProp”)))
.添加(
限制条件(
TruncateProjection(Projections.Property(“FloatProp”),
66.66))
.List();