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

bud*_*ddy 50 nhibernate queryover

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

 query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)
Run Code Online (Sandbox Code Playgroud)

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

query.Where( x=>x.Code == codePart || x.Description== codePart)
Run Code Online (Sandbox Code Playgroud)

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

select*from n,其中代码如'%abc%'或描述如'%abc%'

pso*_*usa 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)
Run Code Online (Sandbox Code Playgroud)

然后:

query.Where(disjunction)
Run Code Online (Sandbox Code Playgroud)

每个"OR"是一个单独的指令,如果您想要有条件地添加谓词,这将有所帮助.


Die*_*hon 57

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


Ple*_*ori 9

您可能会喜欢的另一个版本如下:

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