2011-07-28 8 views
0

NHibernateのにおよびサブオブジェクト私はこのLINQクエリをしました: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がNHibernateプロバイダに.OrderByDescending(x => 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(文字列 collectionRole)+99
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionaryを置換、ブール浅い)+44
NHibernate.Hql.Ast .ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode AST、文字列queryIdentifier、文字列collectionRole、ブール浅い、 IDictionaryを2 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 、文字列 collectionRole、ブール浅い、IDictionaryを2 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、ブール浅い、 たIDictionary 2 enabledFilters, ISessionFactoryImplementor factory) +53 NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary 2 enabledFilters)249
NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression のQueryExpression、ブール浅い)185
NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression のQueryExpression)158
NHibernate.Linq.NhQueryProvider.PrepareQuery (式expression、 IQUERY &クエリ、NhLinqExpression & nhQuery)82
NHibernate.Linq.NhQueryProvider.Execute(式expression)58
NHibernate.Linq.NhQueryProvider.Execute(式expression)+43 Remotion.Data.Linq.QueryableBase 1.GetEnumerator() +120
System.Collections.Generic.List
1..ctor(IEnumerableを1 collection) +315 System.Linq.Enumerable.ToList(IEnumerable 1ソース)58

誰かが私を助けることができますか?

答えて

1

これは既知の制限です。

Link to Issue

あなたは合計する

here

and here

をachiveしたいものの周りの多くの疑問がある:HQL、複雑なサブクエリ、SQLまたは最新のNHを使用するを使用

+0

「...または最新のNHを使用する」とはどういう意味ですか?最新バージョンsupprtそれ? – danyolgiax

+0

現在AFAIKはトランクのみで、リリースされていないバージョンはまだありません – Firo