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