2

我正在使用Criteria API进行查询并希望查询包含全文索引的列。CreateCriteria包含限制

但是在Criteria API中,我一直无法成功找到CONTAINS

有没有在Criteria中使用CONTAINS的方法?我使用了CreateQuery,并能够正常工作,但想知道是否有方法使用CreateCriteria来完成。

任何指向相同的指针,高度赞赏,因为我从一段时间以来一直在寻找这一点。

回答

1

我们可以生成自定义的SQL部件,其中Criterion.Expresssion.Sql。 (有一个example how to

这可能是方式在我们的例子

var searchedValue = "searched value"; 

var session = ... // get session 

// dynamic way to construct some SQL part 
var criterion = NHibernate.Criterion.Expression 
    .Sql(" CONTAINS ({alias}.LastName, ?) ", 
     new object[] { searchedValue}, 
     new IType[] { NHibernate.NHibernateUtil.String}); 

// our criteria 
var criteria = session.CreateCriteria<MyEntity>(); 

// with our FULLTEXT filter 
criteria.Add(criterion); 

// result.. 
var list = criteria 
    .SetFirstResult(0) // paging 
    .SetMaxResults(10) 
    .List<MyEntity>(); 
+0

真棒@Radim一定将尝试和更新:) – Jack

+0

是啊...这应该做很多的魔法;)... –

+0

还有一个问题。我尝试在一对一的映射上应用过滤器。我想要实现的是在拉对象时添加一个where子句。我添加了一个'property-ref',并且基于该引用进行了拉取,但我想要添加另一个条件。 这可能吗?我不想用袋子,因为'property-ref' +我的条件会给我一个独特的对象。 – Jack