如何在NHibernate Criteria Query中截断浮点值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在NHibernate Criteria Query中截断浮点值?相关的知识,希望对你有一定的参考价值。
我们的数据库中存储了一个值。此值的数据类型为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标准进行相同的查询?
答案
您可以使用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);
}
以及Criteria中的使用示例:
session
.CreateCriteria<Entity>()
.SetProjection(TruncateProjection(Projections.Property("FloatProp")))
.Add(
Restrictions.Eq(
TruncateProjection(Projections.Property("FloatProp")),
66.66))
.List<double>();
以上是关于如何在NHibernate Criteria Query中截断浮点值?的主要内容,如果未能解决你的问题,请参考以下文章
Nhibernate Query By Criteria 条件查询
Nhibernate系列学习之 Criteria查询表达式增删改查
nHibernate标准ResultTransformer不工作