假设我有 2 个表,如下所示:
MainTable (
Id int,
Name varchar(100)
)
RelatedTable (
Id int,
Value int,
MainTableId int -- foreign key
)
MainTable
和之间存在一对多的关系RelatedTable
,例如RelatedTable.MainTableId
引用MainTable.Id
。
我想制作一个自定义IProjection,如下所示:
sess.CreateCriteria<MainTable>()
.SetProjection(
Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("Name"))
.Add(new SumOfValuesProjection(/* arguments??? */))
)
.List();
这会生成以下 SQL:
select
Id,
Name,
-- how to get this sub-query from IProjection?
(select sum(Value)
from RelatedTable
where RelatedTable.MainTableId = MainTable.Id) as SumOfValues
from MainTable
这只是我正在尝试做的一个小例子。就我而言,可能有几十个这样的子查询列。它们都使用聚合函数,但可能并非都使用sum()
.
我正在寻找创建一个自定义IProjection
,但不太确定从哪里开始。
任何帮助将不胜感激。