Мне нужно выполнить группирование, похожее на что-то подобное в 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? Если так, есть ли способ сделать это в LINQ? или критерии API? или HQL?
На данный момент я открыт для всего. Мне просто нужно указать в правильном направлении, потому что все кроличьи норы, на которые я дошел, до сих пор никуда меня не привели.
LINQ, который я пробовал до сих пор, таков:
//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 всегда выдает исключение, если я ссылаюсь на TableC в более чем одном агрегате. Если у меня есть только один агрегат, запрос выполняется. Если я попытаюсь сделать это с двумя агрегатами, я получу исключение.