如何使用休眠条件运行函数?

Posted

技术标签:

【中文标题】如何使用休眠条件运行函数?【英文标题】:How to run a function using a nhibernate criteria? 【发布时间】:2012-07-04 14:18:02 【问题描述】:

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

结果会是这样的:

SELECT count(*) FROM dbo.GetSubStaffsLetterInstances(@staffId) WHERE LetterNumber="1234";

问题是我不知道如何将@staffId 传递给我的条件(我尝试添加 Eq 限制但没有成功,因为限制正在作用于属性) 我知道我可以向 IQuery 添加参数,但我不知道如何使用 ICriteria 对象来实现。

【问题讨论】:

Projection.SqlFunction(...) 但我认为 from 子句不支持它 【参考方案1】:

如果我完全理解您的问题,您可以求助于标准 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>();

或尝试.UniqueResult&lt;long&gt;();,因为我不记得返回哪一个 HQL

【讨论】:

SELECT count(*) FROM dbo.GetSubStaffsLetterInstances(:staffId) WHERE LetterNumber=:letterNum 是标准的产生,是动态产生的。它可以根据用户想要搜索的内容而不同。 只有 HQL 允许您使用表值函数。你读过这个***.com/questions/4249885/…

以上是关于如何使用休眠条件运行函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用休眠条件仅返回对象的一个​​元素而不是整个对象?

休眠查询语言或使用条件?

带有条件的休眠调用函数

您如何在休眠条件中订购 oneToMany 连接表

如何使用具有多个连接的 SQL 查询并使用休眠计数

休眠条件排序依据