小于或等于的 NHibernate 自定义投影
NHibernate custom projection with Less than or Equal to
我正在尝试创建一个投影,它将使用 Levenshtein 搜索距离计算从数据库中过滤结果。为了创建这个,我打开一个到数据库的会话,然后使用 CreateCriteria
查询数据库:
...
return session.CreateCriteria<Contact>()
.Add(Expression.Le(Levenshtein("FullName", "Bob"), 5)
...
为 return 投影的新实例创建了一个小辅助方法 class
public static LevenshteinProjection Levenshtein(string propertyName, string searchValue)
{
return new LevenshteinProjection(propertyName, searchValue);
}
当创建字符串来编译文本时,基本上一切正常,但是当我查看生成的 SQL 时,我想要小于或等于的值是 ?
!
... {rest of sql select} WHERE levenshtein(this_.full_name, 'Bob') <= ?
为什么要添加?我已将 return 类型设置为
public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
return new IType[] { NHibernateUtil.Int32 };
}
谢谢
那个?代表参数占位符。
NHibernate 生成一个 'parameterized query'。它不是使用硬编码的参数值创建查询,而是生成包含参数的查询。
该参数将分配有您提供的值。
这使 DBMS 能够缓存查询执行计划。
我正在尝试创建一个投影,它将使用 Levenshtein 搜索距离计算从数据库中过滤结果。为了创建这个,我打开一个到数据库的会话,然后使用 CreateCriteria
查询数据库:
...
return session.CreateCriteria<Contact>()
.Add(Expression.Le(Levenshtein("FullName", "Bob"), 5)
...
为 return 投影的新实例创建了一个小辅助方法 class
public static LevenshteinProjection Levenshtein(string propertyName, string searchValue)
{
return new LevenshteinProjection(propertyName, searchValue);
}
当创建字符串来编译文本时,基本上一切正常,但是当我查看生成的 SQL 时,我想要小于或等于的值是 ?
!
... {rest of sql select} WHERE levenshtein(this_.full_name, 'Bob') <= ?
为什么要添加?我已将 return 类型设置为
public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
return new IType[] { NHibernateUtil.Int32 };
}
谢谢
那个?代表参数占位符。
NHibernate 生成一个 'parameterized query'。它不是使用硬编码的参数值创建查询,而是生成包含参数的查询。 该参数将分配有您提供的值。
这使 DBMS 能够缓存查询执行计划。