C# 使用QueryExpressionPlan将提示传递给nhibernate
我正在使用NHibernate的QueryExpressionPlan将Hibernate查询语言转换为SQL 以下是C语言中的示例代码: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
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>();