|
From: Roy J. (JIRA) <nh...@gm...> - 2011-05-24 09:54:45
|
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
Priority: Major
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
|