web-dev-qa-db-fra.com

queryover et (x comme 'a' ou y comme 'a')

Salut Existe-t-il un moyen élégant de combiner "comme" et "ou" lorsque j'utilise l'API queryover? pour 'comme' il y a quelque chose comme:

 query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)

pour 'ou' je peux faire quelque chose comme:

query.Where( x=>x.Code == codePart || x.Description== codePart)

mais comment puis-je créer une requête comme celle-ci:

sélectionnez * à partir de n où un code comme '% abc%' ou une description comme '% abc%'

50
buddy
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) ||
            Restrictions.On<Type>(x => x.Description).IsLike(codePart))
56
Diego Mijelshon

Vous pouvez utiliser la classe NHibernate Disjunction pour le faire d'une manière plus élégante (IMHO):

var disjunction= new Disjunction();

disjunction.Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart));
disjunction.Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart));
//(and so on)

puis:

query.Where(disjunction)

Chaque "OU" est une instruction distincte, ce qui vous aide si vous souhaitez ajouter les prédicats de manière conditionnelle.

59
psousa

Une autre version de ceci, qui selon le goût, vous aimerez peut-être, est la suivante:

query.Where(Restrictions.Disjunction()
         .Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart))
         .Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart)));
9
Plebsori