NHibernate – einfachste Möglichkeit, eine LIKE-Suche anhand einer Integer-Spalte mit der Criteria API durchzuführen?

StackOverflow https://stackoverflow.com/questions/1231054

  •  22-07-2019
  •  | 
  •  

Frage

Ich versuche, eine Like-Suche für eine Integer-Spalte durchzuführen. Ich muss die Spalte tatsächlich in einen Varchar-Wert umwandeln und dann die Like-Suche durchführen.Ist das möglich?Was ist der einfachste Weg, dies mit der Kriterien-API zu tun?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
War es hilfreich?

Lösung

Wenn Number eine Zeichenfolge wäre, wäre es einfach:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

Da Sie eine Zahl haben, prüft NHibernate den Typ der Zahl und wenn Sie ihr eine Zeichenfolge geben, wird eine Ausnahme ausgelöst.

Ich bin mir nicht sicher, warum das NH-Team keine Überladung mit Objekt als Parameter und MatchMode-Parametern bereitgestellt hat ....

Wie auch immer, Sie können es immer noch so machen:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

Bearbeiten

Über den Alias:

(Ich kann nicht finden, wo in der Dokumentation darüber gesprochen wird, aber hier ist mein Verständnis davon)

{alias} gibt den Alias ​​zurück, der von NH für die neueste CreateCriteria verwendet wird.Wenn Sie also Folgendes hätten:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();

{alias} wäre in diesem Fall „doc“ – Sie würden also am Ende Folgendes erhalten:doc.Nummer .

Verwenden Sie daher immer {alias} nach der CreateCriteria, deren Alias ​​Sie verwenden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top