如何使用nhibernate标准运行函数?

如何使用nhibernate标准运行函数?,nhibernate,user-defined-functions,nhibernate-criteria,Nhibernate,User Defined Functions,Nhibernate Criteria,我们有一个使用条件构建SQL查询的搜索例程(因为它的限制是动态添加的)。 在特定情况下(非常复杂的情况),我们需要搜索表值函数(我们的模型对象映射到函数) 结果会是这样的: SELECT count(*) FROM dbo.GetSubStaffsLetterInstances(@staffId) WHERE LetterNumber="1234"; 问题是我不知道如何将@staffId传递给我的标准(我尝试添加Eq限制,但没有成功,因为限制对属性有效) 我知道我可以向IQuery添加参数,但

我们有一个使用条件构建SQL查询的搜索例程(因为它的限制是动态添加的)。 在特定情况下(非常复杂的情况),我们需要搜索表值函数(我们的模型对象映射到函数)

结果会是这样的:

SELECT count(*) FROM dbo.GetSubStaffsLetterInstances(@staffId) WHERE LetterNumber="1234";
问题是我不知道如何将@staffId传递给我的标准(我尝试添加Eq限制,但没有成功,因为限制对属性有效)
我知道我可以向IQuery添加参数,但我不知道如何使用ICriteria对象进行添加。

如果我完全理解您的问题,您可以求助于标准SQL:-

var sql = "SELECT count(*) FROM dbo.GetSubStaffsLetterInstances(:staffId) 
   WHERE LetterNumber=:letterNum";

var count = session.CreateSqlQuery(sql)
  .setInt32("staffId", 12345)
  .setString("letternum", "A1")
  .UniqueResult<int>();
var sql=“从dbo.GetSubStaffsLetterInstances(:staffId)中选择计数(*)
其中,LetterNumber=:letterNum”;
var count=session.CreateSqlQuery(sql)
.setInt32(“斯塔菲德”,12345)
.setString(“letternum”、“A1”)
.UniqueResult();

或者尝试
.UniqueResult()
因为我不记得哪个HQL返回了

Projection.SqlFunction(…)
,但我认为dbo.GetSubStaffsLetterInstances(:staffId)的from子句select count(*)中不支持它其中LetterNumber=:letterNum是条件的产物,是动态生成的。它可以根据用户想要搜索的内容而有所不同。只有HQL允许您使用表值函数。你读过这个吗