From: Richard B. (JIRA) <nh...@gm...> - 2011-05-26 14:41:59
|
[ http://216.121.112.228/browse/NH-2733?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=21202#action_21202 ] Richard Brown commented on NH-2733: ----------------------------------- Cheers, thanks for the update. > Using an expression in QueryOver gives: Lambda Parameter not in scope > --------------------------------------------------------------------- > > Key: NH-2733 > URL: http://216.121.112.228/browse/NH-2733 > Project: NHibernate > Issue Type: Bug > Components: QueryOver > Affects Versions: 3.2.0CR1 > Reporter: Roy Jacobs > Assignee: Richard Brown > Priority: Major > Fix For: 3.2.0CR1 > > Attachments: NH2733.zip > > > Among other things we occasionally use an IExpression in a QueryOver 'where', like so: > query.Where(expression); > This used to work quite well in the SVN trunk version of last week, but since then this starts breaking with an ArgumentException saying "Lambda Parameter not in scope". > Now, I've seen that QueryOver got a bit of work done to support things like YearPart etc., so I'm assuming these changes are related. > The expression is constructed like this: > public Expression<Func<Item, bool>> GetExpression(DateTime? myStartDate, DateTime? myStopDate) > { > return item => item.StartDateTime < myStopDate.Value && item.StartDateTime >= myStartDate.Value; > } > The call-stack (copy/pasted from R# test runner) looks like this: > --InvalidOperationException > at System.Linq.Expressions.ExpressionCompiler.GenerateParameterAccess(ILGenerator gen, ParameterExpression p, StackType ask) > at System.Linq.Expressions.ExpressionCompiler.Generate(ILGenerator gen, Expression node, StackType ask) > at System.Linq.Expressions.ExpressionCompiler.GenerateMemberAccess(ILGenerator gen, Expression expression, MemberInfo member, StackType ask) > at System.Linq.Expressions.ExpressionCompiler.Generate(ILGenerator gen, Expression node, StackType ask) > at System.Linq.Expressions.ExpressionCompiler.GenerateLambda(LambdaExpression lambda) > at System.Linq.Expressions.ExpressionCompiler.CompileDynamicLambda(LambdaExpression lambda) > at System.Linq.Expressions.LambdaExpression.Compile() > at NHibernate.Impl.ExpressionProcessor.EvaluatesToNull(Expression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 280 > at NHibernate.Impl.ExpressionProcessor.IsMemberExpression(Expression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 335 > at NHibernate.Impl.ExpressionProcessor.FindMemberProjection(Expression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 166 > at NHibernate.Impl.ExpressionProcessor.ProcessSimpleExpression(Expression left, Expression right, ExpressionType nodeType) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 411 > at NHibernate.Impl.ExpressionProcessor.ProcessBinaryExpression(BinaryExpression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 503 > at NHibernate.Impl.ExpressionProcessor.ProcessAndExpression(BinaryExpression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 470 > at NHibernate.Impl.ExpressionProcessor.ProcessBinaryExpression(BinaryExpression expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 506 > at NHibernate.Impl.ExpressionProcessor.ProcessExpression(Expression`1 expression) in c:\sandbox\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs: line 595 > at NHibernate.Criterion.QueryOver`2.Add(Expression`1 expression) in c:\sandbox\nhibernate\src\NHibernate\Criterion\QueryOver.cs: line 749 > at NHibernate.Criterion.QueryOver`2.Where(Expression`1 expression) in c:\sandbox\nhibernate\src\NHibernate\Criterion\QueryOver.cs: line 357 > at NHibernate.Criterion.QueryOver`2.NHibernate.IQueryOver<TRoot,TSubType>.Where(Expression`1 expression) in c:\sandbox\nhibernate\src\NHibernate\Criterion\QueryOver.cs: line 800 -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |