Tsql Nhibernate表达式。处于极限

Tsql Nhibernate表达式。处于极限,tsql,nhibernate,nhibernate-criteria,Tsql,Nhibernate,Nhibernate Criteria,我正在用In子句的2100多个值查询Nhibernate条件查询。 我执行类似Session.CreateCriteria(typeof()).Add(Expression.In(“fieldName”,arrayValue))的操作 其中arrayValue包含的值超过2100个。我面临错误 发生异常: 未知错误 NHibernate.ADOException:无法执行查询..然后该查询在数组中的值超过3000。 在google的帮助下,我们发现Sql中的IN子句只支持2100个值。 以前有没

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

这是SQL Server的一个限制。我不建议这样做,但如果您坚持的话,您可以通过创建一个表值sql函数(请参阅)来解决这个问题,该函数用逗号(或您想要的任何分隔符)拆分字符串,并将值作为表返回,然后将所有ID作为(例如)传入在1参数中使用逗号分隔的列表,并在条件查询中使用SqlCriteria

例如:


这是SQL Server的一个限制。我不建议这样做,但如果您坚持的话,您可以通过创建一个表值sql函数(请参阅)来解决这个问题,该函数用逗号(或您想要的任何分隔符)拆分字符串,并将值作为表返回,然后将所有ID作为(例如)传入在1参数中使用逗号分隔的列表,并在条件查询中使用SqlCriteria

例如:


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

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

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