【问题标题】:Nhibernate Expression.In limitNhibernate Expression.In 限制
【发布时间】:2012-10-25 09:48:33
【问题描述】:

我正在查询 Nhibernate 条件查询,其中 In 子句的值超过 2100 个。 我做了类似 Session.CreateCriteria(typeof()).Add(Expression.In("fieldName",arrayValue)) 其中 arrayValue 包含超过 2100 个值。我面临错误 发生异常: 未知错误 NHibernate.ADOException: 无法执行查询 ..then 查询在数组中有超过 3000 个值。 在谷歌的帮助下,我们发现 Sql 中的 IN 子句仅支持 2100 个值。 有没有人之前遇到过类似的问题?我们不想更改查询,因为它是以某种通用方式编写的,而不是定制的。

【问题讨论】:

    标签: tsql nhibernate nhibernate-criteria


    【解决方案1】:

    这是 SQL Server 的限制。我不建议这样做,但如果你坚持,你可以通过创建一个表值 sql 函数(参见http://www.dzone.com/snippets/function-getting-comma)来解决它,该函数用逗号(或任何你想要的分隔符)分割字符串并返回值作为表格,然后将所有 ID 作为(例如)1 个参数中的逗号分隔列表传递,并在条件查询中使用 SQLCriterion。

    例如:

      criteria.Add(
          new SQLCriterion("{alias}.ID IN (SELECT element FROM dbo.GetCSVValues(?))", 
              new[]{csvListOfIds}, 
              new[]{NHibernateUtil.String}))
    

    【讨论】:

      【解决方案2】:

      您可以将数组拆分为多个批次,多次查询,然后合并结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多