您好 当我使用查询转换API时,是否有任何优雅的方式组合“喜欢”和“或”? 对于'喜欢',有类似的东西:
query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)
for'或'我可以做类似的事情:
query.Where( x=>x.Code == codePart || x.Description== codePart)
但是如何创建这样的查询:
从代码中选择*代码 '%abc%'或描述如'%abc%'
答案 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)));