Below is an exception I get when calling Count on an NhQueryable object. It 
appears to be this line in the ExpressionParameterVisitor.cs class:

_parameters.Add(expression, new NamedParameter("p" + (_parameters.Count + 
1), expression.Value, type));

This happens while trying to get the data to populate a Telerik MVC Grid. 
The grid allows columns to be filtered by one or two strings. If no filter 
is specified on the grid or if a filter is specified with only one string 
then the code runs fine. It's when two strings are specified in a filter 
(say, a "starts with" string and an "ends with" string), the NH error 
occurs. The where part of the query is created by a call to Telerik code:

Expression<Func<T, bool>> where = 
ExpressionBuilder.Expression<T>(command.FilterDescriptors);

The command parameter is passed into the AJAX method with the grid filter 
stings, and Telerik's ExpressionBuilder parses it into an Expression. 

Then essentially the app does this:

IQueryable<T> query = session.Query<T>();
if (where != null) query = query.Where(where);
int rowCount = query.Count();

and it's that Count that gives the error. With my limited understanding of 
what is going on with the expression code, it looks correct to me. The left 
and right parts of the parsed Boolean expression are:

((IIF((item != null), item.AccountName, null) ?? 
"").ToLower().StartsWith("abc".ToLower()) == True)
((IIF((item != null), item.AccountName, null) ?? 
"").ToLower().EndsWith("def".ToLower()) == True)

But somehow, when NH's VisitConstantExpression is called, the 
_parametersDictionary already has the 
ConstantExpression in it, hence the error message.

Thanks.

-glenn-



System.ArgumentException was unhandled by user code
  Message=An item with the same key has already been added.
  Source=mscorlib
  StackTrace:
       at System.ThrowHelper.ThrowArgumentException(ExceptionResource 
resource)
       at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue 
value, Boolean add)
       at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue 
value)
       at 
NHibernate.Linq.Visitors.ExpressionParameterVisitor.VisitConstantExpression(ConstantExpression
 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\ExpressionParameterVisitor.cs:line
 
42
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitBinaryExpression(BinaryExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitMethodCallExpression(MethodCallExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitMethodCallExpression(MethodCallExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitBinaryExpression(BinaryExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitBinaryExpression(BinaryExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitLambdaExpression(LambdaExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitUnaryExpression(UnaryExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](T 
expression, String methodName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.<>c__DisplayClass6`1.<VisitAndConvert>b__5(T
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitList[T](ReadOnlyCollection`1
 
list, Func`2 visitMethod) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](ReadOnlyCollection`1
 
expressions, String callerName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitMethodCallExpression(MethodCallExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](T 
expression, String methodName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.<>c__DisplayClass6`1.<VisitAndConvert>b__5(T
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitList[T](ReadOnlyCollection`1
 
list, Func`2 visitMethod) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](ReadOnlyCollection`1
 
expressions, String callerName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitMethodCallExpression(MethodCallExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](T 
expression, String methodName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.<>c__DisplayClass6`1.<VisitAndConvert>b__5(T
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitList[T](ReadOnlyCollection`1
 
list, Func`2 visitMethod) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitAndConvert[T](ReadOnlyCollection`1
 
expressions, String callerName) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitMethodCallExpression(MethodCallExpression
 
expression) in :line 0
       at 
Remotion.Data.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression 
expression) in :line 0
       at 
NHibernate.Linq.Visitors.NhExpressionTreeVisitor.VisitExpression(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\NhExpressionTreeVisitor.cs:line
 
32
       at 
NHibernate.Linq.Visitors.ExpressionParameterVisitor.Visit(Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\Visitors\ExpressionParameterVisitor.cs:line
 
20
       at NHibernate.Linq.NhLinqExpression..ctor(Expression expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhLinqExpression.cs:line 37
       at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression 
expression, IQuery& query, NhLinqExpression& nhQuery) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 41
       at NHibernate.Linq.NhQueryProvider.Execute(Expression expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 26
       at NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression 
expression) in 
d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:line 103
       at System.Linq.Queryable.Count[TSource](IQueryable`1 source)
       at 
Website.Services.LookupTableServiceBase`1.GetLookupGrid(GridCommand 
command, IUserInfo`1 userInfo, String userNameMember) in 
G:\Website\Services\LookupTableServiceBase.cs:line 169
       at 
Website.Controllers.LookupTablesController.LookupIndex[T](GridCommand 
command, ILookupTableService`1 lookupService) in 
G:\Website\Controllers\LookupTablesController.cs:line 81
       at 
Website.Controllers.LookupTablesController._NicknameIndex(GridCommand 
command) in G:\Website\Controllers\LookupTablesController.cs:line 475
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 
controller, Object[] parameters)
       at 
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 
controllerContext, IDictionary`2 parameters)
       at 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 
controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 
parameters)
       at 
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
       at 
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 
filter, ActionExecutingContext preContext, Func`1 continuation)
  InnerException: 

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/VwBG7B_35FUJ.
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