如何使用Nhibernate QueryOver调用Oracle的regexp_like函数?

时间:2014-07-16 13:45:00

标签: sql regex function nhibernate queryover

我知道我需要使用Restrictions.Eq和Projections.SqlFunction,但我已经尝试了几个小时而没有任何成功(我的测试应用只是崩溃了)。有没有人有一个QueryOver示例,可以在Oracle中执行以下操作:

SELECT
  *
FROM
  V_LOG_ENTRIES
WHERE
  regexp_like(ENTRY_TEXT, '(\WPlaced\W)');

更新:好的,我认为问题的一部分是Restrictions.Eq期望相等,但在这种情况下没有相等,它只是WHERE子句中的函数调用...

1 个答案:

答案 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)
    ...