5

Ich versuche, die SQL-Funktion CONSTAINS zu verwenden, um einige Daten auf QueryOver API zu filtern.So verwenden Sie die Volltextsuche für eine beliebige Eigenschaft mit QueryOver API

Das Hauptproblem ist i nicht SqlFunction in where-Klausel verwenden können, ist es nicht kompilieren lässt, weil ein ICriterion benötigt wird.

var result = Session.QueryOver<Individual>() 
    .Where(Projections.SqlFunction(
     "FullTextContains", NHibernateUtil.Boolean, 
     Projections.Property<Individual>(x => x.LastName), 
     Projections.Constant("something"))) 
     .List(); 

ich versuchte, es zu einem TRUE konstant zu passen, aber wenn die Abfrage erzeugt es Fehler Syntax ausgeführt wird, weil CONSTAINS Funktion nicht gleich Operator verwendet werden kann.

var result = Session.QueryOver<Individual>() 
    .Where(Restrictions.Eq(Projections.SqlFunction(
     "FullTextContains", NHibernateUtil.Boolean, 
     Projections.Property<Individual>(p => p.LastName), 
     Projections.Constant("something")), true)) 
     .List(); 

Wie kann ich eine boolean SQL-Funktion verwenden direkt in denen die Expression auf QueryOver API?

Antwort

3

Dies ist, wie ich fand, wie man es benutzt:

var projection = Projections.SqlFunction("FullTextContains", 
    NHibernateUtil.Boolean, 
    Projections.Property<Individual>(x => x.LastName), 
    Projections.Constant("something")); 

var result = Session.QueryOver<Individual>() 
    .Where(new ProjectionAsCriterion(projection)) 
    .List(); 

a zu verwenden IProjection als ICriterion ich meine eigene Implementierung erstellen basierend auf SimpleExpression Klasse von NHibernate-Projekt.

Verwandte Themen