Nhibernate 在条件限制中使用存储过程的结果。在

Nhibernate 在条件限制中使用存储过程的结果。在,nhibernate,criteria,detachedcriteria,Nhibernate,Criteria,Detachedcriteria,我有以下标准: DetachedCriteria students = DetachedCriteria.For(typeof(Submission)) .SetProjection(Projections.Property("ID")) .Add(Restrictions.In("JicsStudent.HostID", visiblestudents)); visiblestudents是一个列表。在遇到2100参数限制之前,它工作得很好。visiblestudents由另一个查询填充,

我有以下标准:

DetachedCriteria students = DetachedCriteria.For(typeof(Submission)) 
.SetProjection(Projections.Property("ID"))
.Add(Restrictions.In("JicsStudent.HostID", visiblestudents));
visiblestudents是一个
列表
。在遇到2100参数限制之前,它工作得很好。visiblestudents由另一个查询填充,该查询在存储过程中具有一些疯狂的业务逻辑。然后,存储过程的返回将被linq过滤到
列表中


所以我的问题是,有没有办法用存储过程替换
列表
,以防止SQL错误?到目前为止,我在stackoverflow上找到的所有信息都表明,我应该使用列表创建一个临时表,然后使用联接,但我的主管更希望我不使用临时表。

我们找到了一个解决方案,似乎可以按照我们的要求工作

var n = new object[2];
var o = new IType[2];

DetachedCriteria students = DetachedCriteria.For(typeof (Submission))
.SetProjection(Projections.Property("ID"))
.Add(Expression.Sql("{alias}.StudentUserID in (select UserId from RMS_udfVisibleStudents(?, ?))", n, o));

关于与NHibernate一起使用存储过程,有一些很好的信息和讨论