Join nhibernate HQL从两个或多个表中选择

Join nhibernate HQL从两个或多个表中选择,join,nhibernate,hql,Join,Nhibernate,Hql,我一直在尝试使用HQL获得两个类的结果。它适用于一个表,但不适用于两个表 以下两个实体 public class A_CUSTOMER { public virtual string CUSTOMER_NO { get; set; } public virtual string ADDRESS_LINE { get; set; } public virtual IList<A_ACCOUNT> ACCOUNTS { get;

我一直在尝试使用HQL获得两个类的结果。它适用于一个表,但不适用于两个表

以下两个实体

public class A_CUSTOMER
    {
        public virtual string CUSTOMER_NO { get; set; }
        public virtual string ADDRESS_LINE { get; set; }

        public virtual IList<A_ACCOUNT> ACCOUNTS { get; set; }
    }

public class A_ACCOUNT
    {
        public virtual string AC_NO { get; set; }
        public virtual string CUST_NO { get; set; }
        public virtual string CCY { get; set; } 
        public virtual string AVL_BAL { get; set; }  


        public virtual A_CUSTOMER CUSTOMER { get; set; }

    }
我还尝试了不同的查询字符串:

string qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE"+
               "from A_ACCOUNT as h left join A_CUSTOMER g on "+
               "h.CUST_NO=g.CUSTOMER_NO"+ 
               "where  h.AC_NO IN (:list)";
如果遇到以下错误,将非常感谢您的帮助

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException was unhandled by user code
  HResult=-2146232832
  Message=Exception of type 'Antlr.Runtime.NoViableAltException' was thrown. near line 1, column 83
  Source=NHibernate
  StackTrace:
       at NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException()
       at NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()
       at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryString, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
       at NHibernate.Engine.Query.HQLStringQueryPlan.CreateTranslators(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
       at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
       at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
       at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String queryString, Boolean shallow, IDictionary`2 enabledFilters)
       at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String query, Boolean shallow)
       at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String queryString)
       at MvcApplication2.Controllers.CustAccountController.GetCustData(jQueryDataTableParamModel param) in ...
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
  InnerException: 
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException未由用户代码处理
HResult=-2146232832
Message=引发了类型为“Antlr.Runtime.NoViableAltException”的异常。靠近第1行第83列
来源=NHibernate
堆栈跟踪:
在NHibernate.Hql.Ast.ANTLR.ErrorCounter.ThrowQueryException()中
在NHibernate.Hql.Ast.ANTLR.HqlParseEngine.Parse()中
在NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(字符串查询字符串、字符串集合角色、布尔值浅型、IDictionary`2过滤器、ISessionFactoryImplementor工厂)
在NHibernate.Engine.Query.HQLStringQueryPlan.CreateTranslators(字符串hql、字符串集合角色、布尔值浅、IDictionary`2启用的过滤器、ISessionFactoryImplementor工厂)
在NHibernate.Engine.Query.HQLStringQueryPlan..ctor(字符串hql,字符串集合角色,布尔值浅,IDictionary`2启用的过滤器,ISessionFactoryImplementor工厂)
在NHibernate.Engine.Query.HQLStringQueryPlan..ctor(字符串hql,布尔值浅,IDictionary`2 enabledFilters,ISessionFactoryImplementor工厂)
在NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(字符串queryString,布尔浅值,IDictionary`2 enabledFilters)
位于NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(字符串查询,布尔值)
位于NHibernate.Impl.AbstractSessionImpl.CreateQuery(字符串查询字符串)
在。。。
在lambda_方法中(闭包、控制器基、对象[])
位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数)
位于System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41()中
在System.Web.Mvc.Async.AsyncResultRapper.c_uuu显示类8`1.b_uuu7(IAsyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_uuDisplayClass37.c_uuDisplayClass39.b_u33()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49()中
内部异常:

您在单词
地址行
之后和第二行
之前缺少空格

string qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE"+
                    "from A_ACCOUNT as h,A_CUSTOMER g "+ 
                    "where h.CUST_NO=g.CUSTOMER_NO AND h.AC_NO IN (:list)";
一种方法是删除所有引用的引号:-
“+”
,例如

var qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE  
                           from A_ACCOUNT as h,A_CUSTOMER g
                           where h.CUST_NO=g.CUSTOMER_NO AND h.AC_NO IN (:list)";

请注意,在我的示例中,我只有一个开始的
(引号)和一个结束的

Rippo在间距和引号方面是正确的,此外,我注意到我在HQL中仍然引用类名,而不是别名引用名

我从 “
A_账户作为h左加入客户g于
” 到 “
从h离开时加入h.g客户的A_账户

应该是的

string qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE"+
               "from A_ACCOUNT as h left join h.CUSTOMER  g on "+
               "h.CUST_NO=g.CUSTOMER_NO"+ 
               "where  h.AC_NO IN (:list)";
var qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE  
                           from A_ACCOUNT as h,A_CUSTOMER g
                           where h.CUST_NO=g.CUSTOMER_NO AND h.AC_NO IN (:list)";
string qry = @"select h.AC_NO,h.BRANCH_CODE,h.CUST_NO,h.CCY,h.AVL_BAL ,g.ADDRESS_LINE"+
               "from A_ACCOUNT as h left join h.CUSTOMER  g on "+
               "h.CUST_NO=g.CUSTOMER_NO"+ 
               "where  h.AC_NO IN (:list)";