【问题标题】:Linq to NHibernate and sub-object queryLinq to NHibernate 和子对象查询
【发布时间】:2011-10-15 13:35:15
【问题描述】:

我有这个 Linq 查询:

var query = (from i in session.Query<Photo>()
                   where i.IsApproved == true
                   select i);

            if (topPhotoEnum.Equals(TimeModeEnum.Today))
                query = query.Where(x => x.UploadDate >= DateTime.Today 
                                       && x.UploadDate <= DateTime.Now);

 //return  query.OrderByDescending(x => x.Votes.Count).Take(number).ToList();

 return query.ToList()
           .OrderByDescending(x => x.Votes.Count).Take(number).ToList();

这里的问题是我从数据库中检索所有数据,然后我调用OrderByDescendingTake 来过滤数据。

我更愿意让数据库过滤数据,但似乎 Linq to NHibernate 提供程序不支持.OrderByDescending(x =&gt; x.Votes.Count),因为它是一个子集合操作。

Antlr.Runtime.NoViableAltException

NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException() +100
NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate() +305
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(字符串 收藏角色)+99
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary2 replacements, Boolean shallow, String collectionRole) +561
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary
2 替换,布尔浅)+44
NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary2 filters, ISessionFactoryImplementor factory) +320
NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary
2 过滤器, ISessionFactoryImplementor 工厂)+66
NHibernate.Engine.Query.HQLExpressionQueryPlan.CreateTranslators(字符串 expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary2 enabledFilters, ISessionFactoryImplementor factory) +86
NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary
2 enabledFilters, ISessionFactoryImplementor 工厂)+63
NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(字符串 expressionStr, IQueryExpression queryExpression, Boolean shallow, IDictionary2 enabledFilters, ISessionFactoryImplementor factory) +53 NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary2 enabledFilters) +249
NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression,布尔浅)+185
NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression 查询表达式)+158
NHibernate.Linq.NhQueryProvider.PrepareQuery(表达式表达式, IQuery&查询,NhLinqExpression&nhQuery) +82
NHibernate.Linq.NhQueryProvider.Execute(表达式表达式) +58
NHibernate.Linq.NhQueryProvider.Execute(表达式表达式) +43
Remotion.Data.Linq.QueryableBase1.GetEnumerator() +120
System.Collections.Generic.List
1..ctor(IEnumerable1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable1 源) +58

有人可以帮我吗?

【问题讨论】:

    标签: c# .net nhibernate linq-to-nhibernate


    【解决方案1】:

    这是一个已知的限制。

    Link to Issue

    关于你想要达到的目标有很多问题

    here

    and here

    总结一下:用HQL、复杂子查询、sql还是用最新的NH

    【讨论】:

    • "...或使用最新的 NH" 你是什么意思?最新版本支持吗?
    • AFAIK 目前仅在 Trunk 中,尚未发布版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多