Restrictions.Disjunction().Add(Subqueries.WhereValue(1)

本文关键字:WhereValue Subqueries Add Restrictions Disjunction | 更新日期: 2023-09-27 17:55:21

这在nhibernate中是什么意思。谁能给我举个小例子?有人可以给我举个例子吗

Restrictions.Disjunction().Add(Subqueries.WhereValue(1).Eq(subquerycount)..

这些@p3,@p7做什么?

select  a1, a2 from table1
inner join table2
where (
@p3 = (select count(somevariable)
from t1)
or
table2.isspecific = 0
and @p7=(Select count...)

Restrictions.Disjunction().Add(Subqueries.WhereValue(1)

我假设subquerycount是一个分离的条件或查询。考虑到这一点:

Restrictions.Disjunction()
  • Restrictions类是用于构建...好吧,限制。这些由 NHibernate 转换为最终生成的 SQL 查询的WHERE部分。
  • Disjunction 方法是创建析取的帮助程序方法。在这种情况下,这是任意数量的条件与OR连接在一起。还有Restrictions.Conjunction()生成连词,除了与AND连接在一起之外,这是一回事。

这就是在您发布的 WHERE 子句中创建 SQL 的原因。具体来说OR部分:

(
@p3 = (select count(somevariable)
from t1)
or -- Right here
table2.isspecific = 0
and @p7=(Select count...)
)

下一部分:

.Add(Subqueries.WhereValue(1).Eq(subquerycount)

我们说的是"接受这个析取并为其添加一个条件"。我们基本上是在添加一个表达式,该表达式将与其他表达式(如果有的话)OR

我们添加的表达式(Subqueries.WhereValue(1).Eq(subquerycount))(可能)等于SQL中的这个位:

@p3 = (select count(somevariable)
from t1)

希望这有助于解释有问题的线路在做什么。

这些@p3,@p7做什么?

NHibernate生成参数化SQL。当您提供一个值(如示例中的"1")时,该值将以参数的形式发送到数据库。您在生成的 SQL 中看到的@p0 ... @pn值只是 NHibernate 为您自动生成的参数。

在您的示例中,我猜@p3被分配给1.