Thanks Stefan, I think that thread is more about calling a method from a where clause, whereas our problem is about building a hql expression that is essentially a bunch of OR'ed conditions.
Maybe a better way to approach the problem would be to just ask: If you were building an hql generator that needed to OR an arbitrary number of conditions, how would you build it? Thanks, Dan Lash On Mon, Dec 20, 2010 at 7:11 AM, Stefan Wenig <[email protected]>wrote: > might be related: > > http://groups.google.com/group/nhibernate-development/browse_thread/thread/51913633e6ab0ddc/d23b7889897c5d0c > > On Dec 20, 4:27 am, Dan Lash <[email protected]> wrote: > > I'm having the exact same problem as you. To get past your current > > problem I think you need to call visitor.Visit(condition) before > > AsBooleanExpression(). But from there I think you'll run into other > > problems like me. > > > > I've tried to take the loop out of the equation - also I couldn't get > > treeBuilder.False() to work so I went with Equality 1=0: > > > > var column = visitor.Visit(arguments[0]).AsExpression(); > > > > treeBuilder.BooleanOr( > > treeBuilder.BooleanOr( > > treeBuilder.Equality( > > treeBuilder.Constant(0), > > treeBuilder.Constant(1)) > > , treeBuilder.Like( > > column, > > treeBuilder.Constant("hi").AsExpression())) > > , treeBuilder.Like( > > column, > > treeBuilder.Constant("bye").AsExpression())); > > > > So basically it's trying to build an expression that looks like this: > > > > ((0 = 1) OR (column LIKE 'hi') OR (column LIKE 'bye')) > > > > OR > > / \ > > OR column LIKE 'bye' > > / \ > > 0 = 1 column LIKE 'hi' > > > > Returning just one BooleanOr from BuildHql works correctly, but > > nesting another BooleanOr produces this at runtime: > > > > Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. > > [.Where(NHibernate.Linq.NhQueryable`1[Event], Quote((evt, ) => > > (.IsLike(evt.Description, p1, ))), )] > > > > Any ideas on how to build up multiple OR statements in a custom > > HqlGenerator? > > > > Thanks! > > > > Dan Lash > > > > On Dec 19, 10:24 am, Nikodem Rafalski <[email protected]> > > wrote: > > > > > > > > > > > > > Hi, I'm extending NHibernate Linq provider to support my custom > > > predicates in Where clause. But I've got one problem. I cant' join two > > > or more HqlExpression with boolean or operator. > > > > > Here is my code (only important lines provided) > > > > > HqlExpression resultNode = treeBuilder.False(); > > > foreach () > > > { > > > HqlExpression condition = treeBuilder.Like(leftExpression, > > > rigthExpression); > > > resultNode = > > > treeBuilder.BooleanOr(resultNode.AsBooleanExpression(), > > > condition.AsBooleanExpression()); > > > > > } > > > > > return resultNode; > > > > > The problem is that AsBooleanException throws that it cannot cast > > > HqlExpression to HqlBooleanExpression. How should it be done. > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
