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

时间:2010-12-27 20:20:32

标签: nhibernate queryover

您好 当我使用查询转换API时,是否有任何优雅的方式组合“喜欢”和“或”? 对于'喜欢',有类似的东西:

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

for'或'我可以做类似的事情:

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

但是如何创建这样的查询:

  

从代码中选择*代码   '%abc%'或描述如'%abc%'

3 个答案:

答案 0 :(得分:59)

您可以使用NHibernate Disjunction 类以更优雅(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)

然后:

query.Where(disjunction)

每个“OR”都是一个单独的指令,如果你想有条件地添加谓词,这会有所帮助。

答案 1 :(得分:56)

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

答案 2 :(得分:9)

根据品味,您可能喜欢的另一个版本如下:

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