c# – 如何在linq-to-Nhibernate中使用多个条件的连接

我有两个课程(请求和请求细节).我需要一个 Linq到NHibernatequery之间的两个类之间加入.
var q = SessionInstance.Query<Request>()
       .Where(x => x.State == "Init");

var q2 = SessionInstance.Query<RequestDetail>();
q2 = q2.Where(xx => xx.Purpose.Contains("Purpose Sample")); // This line has a error When execution ‍‍`q.ToList()‍`

q = q.Join(q2,request => request.Id,detail => detail.Id,(request,detail) => request);

return q.ToList();

当我向q2添加Where条件时,Result有一个运行时错误.异常消息是:不支持指定的方法.

堆栈跟踪 :

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,ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression,IDictionary`2 enabledFilters)
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression,Boolean shallow)
   at NHibernate.Impl.AbstractSessionImpl.createquery(IQueryExpression queryExpression)
   at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression,IQuery& query,NhLinqExpression& nhQuery)
   at NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression expression)
   at Remotion.Data.Linq.QueryableBase`1.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

为什么?

解决方法

这可能是一个bug.

以下是您的问题的解决方法

var q = (from request in session.Query<Request>()
        join detail in session.Query<RequestDetail>() on request.Id equals detail.Id
        where request.State == "Init" && detail.Purpose.Contains("Purpose Sample")
        select request).ToList();

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...