0

在 NHibernate ICriteria 中使用全文搜索时遇到问题

我已经注册了自由文本并包含以下内容:

public class CMSSQLDialect : MsSql2008Dialect   {
    public CMSSQLDialect()
    {
        RegisterFunction("freetext", new StandardSQLFunction("freetext", null));
        RegisterFunction("contains", new StandardSQLFunction("contains", null));
    }
}

现在我想使用 ICriteria 中的函数,例如:

var store = sessionFactory.CreateCriteria(typeof(Comito.CMS.Domain.Entity.Document.Document));
var stringSearchProjection = Projections.SqlFunction("freetext", NHibernateUtil.StringClob, Projections.Property("BodyText"));

尝试将投影添加到搜索中:

store.Add(Restrictions.Eq(stringSearchProjection , '*mysearch*'));

(当然)返回

SELECT  this_.BodyText as y0_ FROM TableName WHERE  freetext(this_.BodyText) = 'dav' 

但是我如何在 ICriteria 中实现自由文本

4

1 回答 1

0

在这种情况下,我们不需要投影注册 SQL 函数。我们可以像这样在 WHERE 子句中使用它:

store.Add(
    Expression.Sql(
        "CONTAINS(BodyText, ?)",
        "*mysearch*",
        NHibernateUtil.String
    )
);

Expression是_NHibernate.Criterion.Expression

于 2018-04-24T09:50:04.887 回答