51

嗨,当我使用 queryover API 时,有什么优雅的方式可以结合“like”和“or”吗?对于“喜欢”有类似的东西:

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

对于“或”,我可以执行以下操作:

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

但我怎样才能创建这样的查询:

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

4

3 回答 3

60

您可以使用 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)

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

于 2011-01-27T09:11:01.513 回答
57
query.Where(Restrictions.On<Type>(x => x.Code).IsLike(codePart) ||
            Restrictions.On<Type>(x => x.Description).IsLike(codePart))
于 2010-12-27T21:42:06.043 回答
9

另一个版本,根据口味,你可能喜欢,如下:

query.Where(Restrictions.Disjunction()
         .Add(Restrictions.On<Type>(e => e.Code).IsLike(codePart))
         .Add(Restrictions.On<Type>(e => e.Description).IsLike(codePart)));
于 2011-12-06T03:18:21.423 回答