be brave! try what I said, add a test or two, and if it works, send a patch!
On Jan 4, 11:00 pm, Farzad <[email protected]> wrote: > I have a query that used to work in NHibernate LINQ 2.1.2 but it is > throwing NotSupportedException with NH3: > > IQueryable<Tree> query = from flower in > GetSession().Query<Flower>() > from leaf in > flower.Stem.Leaves // <--- the problem is here with three jumps > where leaf.Color == Green > select flower; > > The relations are like: > - Flower References Stem > - Stem HasMany Flowers > - Leaf References Stem > - Stem HasMany Leaves > > The exception is thrown from line 204 in > NHibernate.Linq.Visitors.QueryModelVisitor. Here is the method from > the source code: > > public override void > VisitAdditionalFromClause(AdditionalFromClause > fromClause, QueryModel queryModel, int index) > { > if (fromClause is LeftJoinClause) > { > // It's a left join > _hqlTree.AddFromClause(_hqlTree.TreeBuilder.LeftJoin( > > HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, > VisitorParameters).AsExpression(), > > _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); > } > else if (fromClause.FromExpression is > MemberExpression) > { > var member = (MemberExpression) > fromClause.FromExpression; > > if (member.Expression is > QuerySourceReferenceExpression) > { > // It's a join > > _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Join( > > HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, > VisitorParameters).AsExpression(), > > _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); > } > else > { > // What's this? > throw new NotSupportedException(); // > <----------------------- > LINE 204 > } > } > else > { > // TODO - exact same code as in > MainFromClause; refactor this out > _hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range( > > HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, > VisitorParameters), > > _hqlTree.TreeBuilder.Alias(fromClause.ItemName))); > > } > > base.VisitAdditionalFromClause(fromClause, > queryModel, index); > } > > It seems to me the same issue is discussed under the following thread: > > http://groups.google.com/group/nhusers/browse_thread/thread/dbceb7eb1... > > Under that thread Stefan mentions that the syntax is not supported: > The LINQ provider expects the expression to be: > <QuerySourceReferenceExpression> . <Member> > However, in the case of from brw in > loan.Application.Borrowers it is: > <QuerySourceReferenceExpression> . <Member> . <Member> > So it's definately an unsupported feature. > > So the question is if this syntax is going to be supported anytime in > NH3 LINQ? I think it is a trivial syntax and it's good to have. > > However I can go around this issue by rewriting the query as: > > IQueryable<Tree> query = from stem in > GetSession().Query<Stem>() > from leaf in > stem.Leaves > from flower in > stem.Flowers > where leaf.Color == > Green > select flower; > > BTW, anyone has a better workaround? -- 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.
