问题
NHibernate version 3.3.1.4000
Query:
IQueryable<Activity> activities = _repository.GetList<Activity>();
IQueryable<ActivityStatistic> statistics = activities
.GroupBy(activity => activity.ActivityLicense.SerialNumber)
.Select(grouping => new ActivityStatistic
{
ActivityCount = grouping.Count(),
LicenseCode = grouping.Key
})
.OrderBy(stat => stat.LicenseCode);
List<ActivityStatistic> result = statistics
.Skip(request.StartIndex)
.Take(request.Count)
.ToList();
If I comment Skip/Take code, it works properly. How can I make it to work together without calling ToList() after OrderBy using LINQ to NHibernate?
Thanks in advance.
Update:
Exception:
The method or operation is not implemented.
at NHibernate.Linq.GroupBy.AggregatingGroupByRewriter.FlattenSubQuery(SubQueryExpression subQueryExpression, QueryModel queryModel)
at NHibernate.Linq.GroupBy.AggregatingGroupByRewriter.ReWrite(QueryModel queryModel)
at NHibernate.Linq.Visitors.QueryModelVisitor.GenerateHqlQuery(QueryModel queryModel, VisitorParameters parameters, Boolean root)
at NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor sessionFactory)
at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, 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, NhLinqExpression& nhQuery)
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)
at MBP.AuthorizationService.Logic.LicenseService.GetActivityStatistic(CommonRequest request, Int32& recordsCount) in D:\Projects\MBP.Launcher\MBP.AuthorizationService.Logic\LicenseService.cs:line 201
回答1:
Michael Petito answered to the question:
This is a known issue that I just ran into as well: nhibernate.jira.com/browse/NH-2566 – Michael Petito Aug 22 at 19:56
Waiting for new releases...
来源:https://stackoverflow.com/questions/11879828/linq-to-nhibernate-groupby-skip-take-cause-an-exception