查询和(x像'a'或y像'a')

您好有什么优雅的方式结合“喜欢”和“或”当我使用的Queryover API? 对于'喜欢'有这样的东西:

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

为'或'我可以做这样的事情:

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

但我怎样才能创build一个这样的查询:

select * from n where code like'%abc%'or description like like'%abc%'

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

您可以使用NHibernate Disjunction类以更优雅(恕我直言)的方式做到这一点:

 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) 

接着:

 query.Where(disjunction) 

每个“或”是一个单独的指令,这有助于如果你想有条件地添加谓词。

另一个版本,这取决于品味,你可能会喜欢,如下所示:

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