我知道我需要使用Restrictions.Eq和Projections.SqlFunction,但我已经尝试了几个小时而没有任何成功(我的测试应用只是崩溃了)。有没有人有一个QueryOver示例,可以在Oracle中执行以下操作:
SELECT
*
FROM
V_LOG_ENTRIES
WHERE
regexp_like(ENTRY_TEXT, '(\WPlaced\W)');
更新:好的,我认为问题的一部分是Restrictions.Eq期望相等,但在这种情况下没有相等,它只是WHERE子句中的函数调用...
答案 0 :(得分:5)
语法应如下所示:
// this is inlined string, but could be concatenated from some params
var sql = @" regexp_like(ENTRY_TEXT, '(\WPlaced\W)') " +
" AS isLike";
var sqlString = new SqlString(sql);
// the ICriterion
var criterion = new NHibernate.Criterion.SQLCriterion(sqlString
, new string[] {}
, new IType[] {}
);
// the query
var query = session.QueryOver<LogEntry>()
.Where(criterion)
...