我需要执行一个类似于T-SQL中的分组聚合:
select b.Name as [Grouped Name],
COUNT(distinct a.ID) as [Grouped Count],
COUNT(distinct c1.ID) as [Second Group Count],
COUNT(distinct c2.ID) as [Third Group Count]
from TableA a
left join TableB b on a.ID = b.TableAID
left join TableC c1 on a.ID = c1.TableAID and c1.SomeCondition = 1
left join TableC c2 on a.ID = c2.TableAID and c2.SomeCondition = 2
group by b.Name
order by b.Name
我曾多次尝试构建一个对象模型,然后使用NH3映射它,然后构建一个将构建此SQL语法的查询,但收效甚微。
这是用NH3可以做到的吗?如果是的话,在林肯有办法做到吗?或者标准API?还是HQL?
到目前为止我试过的关键是:
//act
var query = from a in session.Query<TableA>()
orderby a.TableB.Name
select
new
{
Grouped Name = a.TableB.Name,
GroupedCount = a.Count(),
SecondGroupCount = a.TableC.Count(c => c.SomeCondition == 1),
ThirdGroupCount = a.TableC.Count(c => c.SomeCondition == 2),
};
var results1 = query.ToList();
我也试过和一组人一起使用,但是不管我做什么,NH3总是抛出一个异常,如果我在超过
聚合。如果只有一个聚合,则执行查询。如果我试着用两个集合来做,我会得到一个例外。