1

私のクラスは次のようになります。

class User
{
    IList<UserRedemptionCode> UserRedemptions;
}

class UserRedemptionCode
{
    string Code;
}

class Course
{
    IList<CourseRedemptionCode> CourseRedemptions;
}

class CourseRedemptionCode
{
    string Code;
    string SomeData;
}

ユーザーに関連付けられた引き換えコードに一致するすべてのコースを取得したいと考えています。私が行っている現在の IQuerable 呼び出しは次のとおりです。

IQueryable<Course> query = Courses.Where(
    course => course.CourseRedemptions.Any(
        cr => user.UserRedemptions.Any(rc => cr.Code == rc.Code));

ただし、これは NHibernate では機能しないようです。私はこの例外を受け取ります:

System.NotSupportedExceptionSpecified method is not supported.
  at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource)
  at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode tree)
  at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process()
  at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
  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.Web.Http.Filters.EnumerableEvaluatorFilter.Convert[T](Object input)
  at System.Web.Http.Filters.EnumerableEvaluatorFilter.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
  at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)
  at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass4.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__2(HttpResponseMessage response)
  at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass2e`2.<Then>b__2d(Task`1 t)
  at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken)

別の問題もあります。このクエリではコースのリストが返されますが、ユーザーに関連付けられた CourseRedemptionCode も必要なので、SomeData を取得できます。

何か案は?このクエリを実行する別の方法はありますか?

4

2 に答える 2