c# - SQLCriterion ArgumentOutOfRangeException

标签 c# .net nhibernate queryover

创建 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/

相关文章:

c# - SMTP 错误 : "Client does not have permission to submit mail to this server"

c# - 如何从 Unity 获取接口(interface)实例?

c# - C# .NET 4.5 中的 JavaScript 解析器和分析器

nhibernate - AppFabric:无法联系缓存服务

nhibernate - FluentNHibernate 和枚举

nhibernate - 通过SQLite对.Net 4.0 NHibernate运行NUnit无法加载SQLite DLL

c# - ServiceStack 中是否有任何等效于 ValidateAntiForgeryToken 的东西?

c# - 为什么 Convert.ToInt32 ('1' ) 返回 49?

c# - 为什么 Microsoft 不将 SetPixel() 的实现更改为更快的实现?

c# - 如何对具有不同架构的数据库执行 LINQ 查询?