0
私は、Levenshtein検索距離計算を使用してデータベースから結果をフィルタリングする投影を作成しようとしています。より小さいか等しいとNHibernateカスタム投影
...
return session.CreateCriteria<Contact>()
.Add(Expression.Le(Levenshtein("FullName", "Bob"), 5)
...
投影クラスの新しいインスタンスを返すために小さなヘルパーメソッドを作成し
public static LevenshteinProjection Levenshtein(string propertyName, string searchValue)
{
return new LevenshteinProjection(propertyName, searchValue);
}
基本的にすべての作品:この私はDBへのセッションを開き、データベースを照会するためにCreateCriteria
を使用を作成するにはテキストをコンパイルする文字列を作成するときには問題ありませんが、生成されるSQLを見て、それ以下の値にしたい値は?
です!
... {rest of sql select} WHERE levenshtein(this_.full_name, 'Bob') <= ?
なぜそれが追加されますか?私は
public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
return new IType[] { NHibernateUtil.Int32 };
}
おかげ
この場合、データをフィルタリングしないのはなぜですか? – Matt
気にしないで、私は愚かですが、これを調べることで、パラメータとしてlevenshtienの2番目の値を追加して、SQLを改善しました。実際に渡されたパラメータを示す接続文字列にShowSqlを使用しました(SQLを実行すると同じ結果が得られました)。 – Matt
また、私は違いを学ぶ必要があります<= and > = *失望の机の上に頭を打つ* – Matt