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();
您可以根据需要使用 Criteria
或 QueryOver
构建它。
感谢大家帮我解决这个问题。
我想使用 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();
您可以根据需要使用 Criteria
或 QueryOver
构建它。
感谢大家帮我解决这个问题。