C# 使用QueryExpressionPlan将提示传递给nhibernate

C# 使用QueryExpressionPlan将提示传递给nhibernate,c#,.net,.net-core,nhibernate,C#,.net,.net Core,Nhibernate,我正在使用NHibernate的QueryExpressionPlan将Hibernate查询语言转换为SQL 以下是C语言中的示例代码: var hql = SELECT _table0.Id FROM MyTable1 _table0 WHERE 1=1 and _table0.Address.ZipCode LIKE '%58745%' ; var sql = NHibernate.Engine.Query.QueryExpressionPlan

我正在使用NHibernate的QueryExpressionPlan将Hibernate查询语言转换为SQL

以下是C语言中的示例代码:

var hql = SELECT _table0.Id FROM MyTable1 _table0 WHERE 1=1 and _table0.Address.ZipCode  LIKE   '%58745%' ;

var sql = NHibernate.Engine.Query.QueryExpressionPlan
                 (new StringQueryExpression(hql), false, session.EnabledFilters, sessionFactory) ;
下面是生成的SQL。NHibernate无法将内部联接添加到生成的SQL中,并以逗号分隔的格式返回记录,如下所示

select myTable1.AssetId as col_0_0_ from MyTable1 myTable1, Address address1_ 
    where myTable1.AddressId=address1_.AddressID 
    and 1=1 and (address1_.ZipCode like '%58745%');
我的查询是我应该添加到QueryExpression的内容,以便它自动将内部联接添加到生成的sql中

或者是因为NHibernate本身不会添加内部连接,我需要自己获取这些信息并将其传递给NHibernate

是的,您可以使用HQL语句上的内部联接在NHibernate代码上定义联接。请查看文档中的

请记住,HQL是Hibernate查询语言,它基于实体模型映射的类,而不是关系模型表

记住绑定hql语句上的参数并在会话上设置它。对于示例:

var hql = "SELECT e.Id FROM MyEntity e 
           INNER JOIN e.Address a 
           WHERE a.ZipCode  LIKE :zipCode";

var zipCodeData = "58745";

var result = session.CreateQuery(hql)
                    .SetParameter("zipCode", $"%{zipCodeData}%")
                    .List<int>();