50 votes

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

Bonjour Existe-t-il un moyen élégant de combiner "like" et "or" lorsque j'utilise l'API Queryover ? Pour "like" 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 :

select * from n where code like '%abc%' ou description comme '%abc%'.

59voto

psousa Points 4211

Vous pouvez utiliser l'outil NHibernate Disjonction pour faire cela 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)

et ensuite :

query.Where(disjunction)

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

57voto

Diego Mijelshon Points 40314
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) ||
            Restrictions.On<Type>(x => x.Description).IsLike(codePart))

9voto

Plebsori Points 315

Une autre version, qui peut vous plaire selon vos goûts, 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)));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X