Nhibernate 添加参数作为内联文本

Nhibernate add parameters as inline text

我想使用 nhibernate 执行查询,但我想将参数添加为不带别名的内联字符串,以下示例将解释我的意思。

标准生成的查询:

SELECT * FROM Accounts WHERE AccountNumber in (@p0 , @p1 , @p2)

意向查询:

SELECT * FROM Accounts WHERE AccountNumber in ('0','1','2')

仅供参考:我正在使用 Orchard CMS

可以使用HQL:

var accountNumbers = new[] {1, 2, 3, 4};

var hql = string.Format("from Account where Account.AccountNumber in ({0})", string.Join(",",accountNumbers)); 

var results = session.CreateQuery(hql).List<Account>();

恕我直言,在 NHibernate 参考资料中没有禁用参数生成这样的东西。

我会选择generating the query without execution,然后手动替换参数,然后执行。

最后,我找到了使用Expression.Sql的解决方案,它用于将混合查询构建为lambda表达式和纯文本表达式,下面的代码将对其进行解释:

var accountQuery = _session.CreateCriteria(typeof(AccountRecord));
accountQuery.Add(Expression.Sql("AccountNumber in ('" + string.Join("','", contractAccountsList) + "')"));
accountQuery.Add(Restrictions.Eq("IsRegistered", true));
var result = accountQuery.List().AsEnumerable();

您可以根据需要使用 CriteriaQueryOver 构建它。

感谢大家帮我解决这个问题。