2010-12-27 11 views
49

Hola ¿Hay alguna manera elegante de combinar 'me gusta' y 'o' cuando estoy usando queryover API? de 'like' hay algo así como:queryover y (x como 'a' o y como 'a')

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

para 'o' yo puedo hacer algo como:

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

pero ¿cómo puedo crear una consulta como esta:

seleccione * de n donde código como '% abc%' o una descripción como '% abc%'

Respuesta

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

Gracias por consulta –

59

Se podría utilizar el NHibernate disyunción clase para hacer esto de una manera más elegante (en mi humilde opinión) de la 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) 

y luego:

query.Where(disjunction) 

Cada "O" es una separada instrucción, que ayuda si desea agregar los predicados condicionalmente.

+0

trabajando esta respuesta me ha ayudado enormemente - gracias – Haroon

+0

respuesta fresco, gracias –

9

Otra versión de este, que dependiendo del gusto, que le gustará, es el siguiente:

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