Hi! Since I've not yet found the time to deeply understand and fix the bug, can you explain me what's the definition of the metatable concept?
I've to understand if it's to be used to fix the problem (actually if the problem is that it's not used or updated when the second join is visited). Giacomo On Fri, Mar 13, 2009 at 3:12 PM, Giacomo Tesio <[email protected]> wrote: > I've added it now, > http://code.google.com/p/dblinq2007/source/diff?spec=svn1016&r=1016&format=side&path=/trunk/src/DbLinq/Test/Providers/ReadTest.cs > > On ReadTest.C12_SelectEmployee_MultiJoinWithWhere() > > > Giacomo > > > On Fri, Mar 13, 2009 at 9:37 AM, Pascal Craponne <[email protected]> wrote: > >> Do we have a unit test somewhere showing this problem? >> Pascal. >> >> jabber/gtalk: [email protected] >> msn: [email protected] >> >> >> >> >> On Fri, Mar 13, 2009 at 08:58, Giacomo Tesio <[email protected]> wrote: >> >>> As far as I saw, the problem signaled is related to multiple joins and >>> anonymous type handling. >>> >>> During the first example expression tree visit, the *where *node is >>> unable to access the *r* parameter, since it is part of a generated >>> anonymous type containing both *r* and *l*. >>> >>> On a single join query there's no such anonymous type, so the *r* would >>> be reachable. >>> >>> >>> Here the question: why there is such anonymous type? >>> Could such anonymous type be substituted by something more easy to >>> handle? (metatable? if I've understood what they are...) >>> Or could a query optimization (given it's executed in the right moment) >>> scompose the where and move each clausole in the right place? >>> >>> >>> Giacomo >>> >>> On Thu, Mar 5, 2009 at 6:57 PM, Giacomo Tesio <[email protected]> wrote: >>> >>>> Building the following query I'm getting such an exception in >>>> DbLinq\src\DbLinq\Data\Linq\Sugar\Implementation\QueryBuilder.cs >>>> >>>> var res = from r in db.Roles >>>> join l in db.RoleUserLinks on r.Id equals >>>> l.cRoleID >>>> join us in db.Users on l.cUserID equals us.Id >>>> *where r.cRole == "RP00"* >>>> select us; >>>> >>>> BTW moving the where in the initial from query execute with no problem: >>>> var res = from r in db.Roles*.Where((r) => r.cRole == >>>> "RP00")* >>>> join l in db.RoleUserLinks on r.Id equals >>>> l.cRoleID >>>> join us in db.Users on l.cUserID equals us.Id >>>> select us; >>>> >>>> I'm try to debug the problem but with no success: >>>> >>>> protected virtual void CompileRowCreator(BuilderContext >>>> builderContext) >>>> { >>>> var reader = builderContext.CurrentSelect.Reader; >>>> reader = >>>> (LambdaExpression)SpecialExpressionTranslator.Translate(reader); >>>> reader = >>>> (LambdaExpression)ExpressionOptimizer.Optimize(reader, builderContext); >>>> builderContext.ExpressionQuery.RowObjectCreator = * >>>> reader.Compile()*; >>>> } >>>> >>>> Exception is thrown from reader.Compile(), but I can't understand the >>>> difference between the two queries... >>>> >>>> What am I missing? >>>> >>>> >>>> Giacomo >>>> >>> >>> >>> >>> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DbLinq" 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/dblinq?hl=en -~----------~----~----~----~------~----~------~--~---
