【问题标题】:SQLCriterion ArgumentOutOfRangeExceptionSQLCriterion ArgumentOutOfRangeException
【发布时间】:2014-10-01 12:36:16
【问题描述】:

创建 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-constructor 的语法是错误的还是我遗漏了什么?

【问题讨论】:

    标签: c# .net nhibernate queryover


    【解决方案1】:

    这个调整应该是这样的:

    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);
    

    【讨论】:

    • 很高兴看到菲利普。进入NHibernate并不是那么容易……但是后来的利润……太棒了。祝你好运
    • 我同意,因为我已经与 NHibernate 合作了很多。然而,这是我第一次使用 QueryOver,因为我尝试将大量旧的内联 sql 搜索逻辑转换为 NH。在大多数情况下,我认为 QueryOver 很容易使用,只是那些需要一些时间来理解的特殊情况。
    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多