小于或等于的 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 能够缓存查询执行计划。