2010-12-27 11 views
49

Ciao C'è un modo elegante di combinare "come" e "o" quando sto usando l'API di queryover? per 'come' non v'è qualcosa di simile:queryover e (x come 'a' o y come 'a')

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

per 'o' che posso fare qualcosa di simile:

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

ma come posso creare una query come questa:

seleziona * da n dove codice come '% abc%' o descrizione come '% abc%'

risposta

56
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) || 
      Restrictions.On<Type>(x => x.Description).IsLike(codePart)) 
+0

Grazie per la ricerca di lavoro –

59

È possibile utilizzare il NHibernate Disjunction classe per fare questo in un più elegante (IMHO) moda:

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) 

e poi:

query.Where(disjunction) 

Ogni "O" è un separato istruzione, che aiuta se si desidera aggiungere condizionatamente i predicati.

+0

questa risposta mi ha aiutato in maniera massiccia - grazie – Haroon

+0

risposta fresca, grazie –

9

Un'altra versione di questo, che a seconda del gusto, come si può, è la seguente:

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