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].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to