创建 SQLCriterion 的正确语法是什么?
我有以下代码:
var sqlCriterion = new SQLCriterion(
new SqlString("{alias}.Id IN (SELECT Id FROM dbo.fGetSomeIds(?1, ?2))"),
new object[] { "param1", "param2" },
new IType[] { NHibernateUtil.String, NHibernateUtil.String });
query.Where(sqlCriterion);
其中查询是我的 QueryOver 实例(使用 NHibernateSession 创建)
当我调用 query.List() 时,出现以下异常:
Index was out of range. Must be non-negative and less than the size of the collection parameter name:index
它被抛出在NHibernate.Criterion.SQLCriterion.ToSqlString(..)中的某个地方
我的 SQLCriterion 构造函数的语法是否错误,或者我是否遗漏了其他内容?
最佳答案
此调整应该使:
var criterion = NHibernate.Criterion.Expression
.Sql("({alias}.Id IN (SELECT Id FROM dbo.fGetSomeIds(?, ?))"
+ " AS MyCriteria",
new object[] { "param1", "param2" },
new IType[] { NHibernateUtil.String, NHibernateUtil.String });
// query.Where(sqlCriterion);
query.Where(criterion);
关于c# - SQLCriterion ArgumentOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141526/