J'avais besoin de filtrer une liste de résultats en utilisant la combinaison de deux propriétés. Une instruction SQL simple ressemblerait à ceci:Critères NHibernate - Comment filtrer sur une combinaison de propriétés
SELECT TOP 10 *
FROM Person
WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
Le ICriteria dans NHibernate que je fini par utiliser est:
ICriteria criteria = Session.CreateCriteria(typeof(Person));
criteria.Add(Expression.Sql(
"FirstName + ' ' + LastName LIKE ?",
"%" + term + "%",
NHibernateUtil.String));
criteria.SetMaxResults(10);
Il fonctionne parfaitement, mais je ne suis pas sûr que ce soit la solution idéale puisque je suis encore en train d'apprendre sur l'API Criteria de NHibernate. Quelles sont les alternatives recommandées?
- Existe-t-il autre chose que
Expression.Sql
qui effectuerait la même opération? J'ai essayéExpression.Like
mais n'a pas pu comprendre comment combiner le prénom et le nom. - Dois-je mapper une propriété FullName à la formule "FirstName + '' + Nom" dans la classe de mappage?
- Dois-je créer une propriété FullName en lecture seule sur l'objet de domaine puis la mapper sur une colonne?
Query-only - comment très utile, ne savait pas à propos de cette option. On dirait que j'apprends quelque chose de nouveau tous les jours dans NHibernate. Merci pour l'exemple de code Projections aussi. – DavGarcia