0
我想創建一個投影,它將使用Levenshtein搜索距離計算從數據庫中篩選結果。要創建這個我打開一個會話到數據庫,然後用CreateCriteria
查詢數據庫: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);
}
本質上一切正常運作的新實例當創建字符串來編譯文本時很好,但是當我查看生成的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
沒關係,我是愚蠢的,但看着這確實提高了我的SQL,因爲我在levenshtien中添加了第二個值作爲參數。我在顯示實際傳遞的參數的連接字符串中使用ShowSql(並運行sql得到相同的結果)。 – Matt
另外,我需要了解<= and > = *之間的差異,令人失望的* – Matt