NHibernate 条件:'From' 子句后的子查询
NHibernate Criteria: Subquery After 'From' Clause
如何使用 Criteria 编写以下 SQL:
select b.Name as Batch, b.Capacity as Capecity,
a.tStudent as Admit, (b.Capacity-a.tStudent) as Availabe
from (
SELECT count(Id) as tStudent, BatchId FROM [dbo].[Student] group by BatchId) as a
left join [dbo].[Batch] as b on a.BatchId = b.Id
要使用 NHibernate,生成这样的查询:
SELECT ...
FROM
(
SELECT ...
) AS a
..
我们必须选择:
- 将子select映射为一个实体。
- 创建原始 SQL 查询
第一个选项意味着创建一些 view
,并将其映射为实体。如果我们不喜欢视图(或无法创建它),我们可以使用 NHibernate 映射的强大功能,element <subselect>
:
<class name="MyEntity"... >
<subselect>
SELECT ...
FROM ...
</subselect>
...
第二个选项是关于使用 NHibernate API 创建 native/raw SQL:
session.CreateSQLQuery("SELECT ")
它不是从映射中获利,但我们仍然可以应用参数,并从转换中获利...
如何使用 Criteria 编写以下 SQL:
select b.Name as Batch, b.Capacity as Capecity,
a.tStudent as Admit, (b.Capacity-a.tStudent) as Availabe
from (
SELECT count(Id) as tStudent, BatchId FROM [dbo].[Student] group by BatchId) as a
left join [dbo].[Batch] as b on a.BatchId = b.Id
要使用 NHibernate,生成这样的查询:
SELECT ...
FROM
(
SELECT ...
) AS a
..
我们必须选择:
- 将子select映射为一个实体。
- 创建原始 SQL 查询
第一个选项意味着创建一些 view
,并将其映射为实体。如果我们不喜欢视图(或无法创建它),我们可以使用 NHibernate 映射的强大功能,element <subselect>
:
<class name="MyEntity"... >
<subselect>
SELECT ...
FROM ...
</subselect>
...
第二个选项是关于使用 NHibernate API 创建 native/raw SQL:
session.CreateSQLQuery("SELECT ")
它不是从映射中获利,但我们仍然可以应用参数,并从转换中获利...