Skip to content

GroupBy to custom class fails with ArgumentException #1704

@ador-mg

Description

@ador-mg

When a custom class is used as the GroupBy object:

var results = Session.Query<Project>()
                .GroupBy(
                    a => new GroupByKey(a.Purpose)
                )
                .Select(
                    a => new GroupBySelect(a.Key, a.Count(), a.Sum(o => o.Budget))
                )
                .ToList();

an ArgumentException is raised:

 System.ArgumentException : Incorrect number of arguments for the given members 
   at System.Linq.Expressions.Expression.ValidateNewArgs(ConstructorInfo constructor, ReadOnlyCollection`1& arguments, ReadOnlyCollection`1& members)
   at System.Linq.Expressions.Expression.New(ConstructorInfo constructor, IEnumerable`1 arguments, IEnumerable`1 members)
   at NHibernate.Linq.GroupBy.GroupKeyNominator.VisitNew(NewExpression expression)
   at NHibernate.Linq.GroupBy.GroupKeyNominator.Visit(Expression expression)
   at NHibernate.Linq.GroupBy.GroupKeyNominator.VisitInternal(Expression expr)
   at NHibernate.Linq.GroupBy.GroupKeyNominator.Visit(GroupResultOperator groupBy)
   at NHibernate.Linq.GroupBy.GroupBySelectClauseRewriter..ctor(GroupResultOperator groupBy, QueryModel model)
   at NHibernate.Linq.GroupBy.GroupBySelectClauseRewriter.ReWrite(Expression expression, GroupResultOperator groupBy, QueryModel model)
   at NHibernate.Linq.GroupBy.AggregatingGroupByRewriter.<>c__DisplayClass2_0.<FlattenSubQuery>b__2(Expression s)
   at Remotion.Linq.Clauses.SelectClause.TransformExpressions(Func`2 transformation)
   at NHibernate.Linq.GroupBy.AggregatingGroupByRewriter.FlattenSubQuery(QueryModel queryModel, QueryModel subQueryModel, GroupResultOperator groupBy)
   at NHibernate.Linq.GroupBy.AggregatingGroupByRewriter.ReWrite(QueryModel queryModel)
   at NHibernate.Linq.Visitors.QueryModelVisitor.GenerateHqlQuery(QueryModel queryModel, VisitorParameters parameters, Boolean root, Nullable`1 rootReturnType)
   at NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor sessionFactory, Boolean filter)
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryExpressionPlan.CreateTranslators(IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryExpressionPlan..ctor(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters)
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow)
   at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)
   at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query)
   at NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
   at NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)
   at Remotion.Linq.QueryableBase`1.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

Test case will follow.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions