J'ai besoin d'effectuer une agrégation de regroupement similaire à quelque chose comme ceci dans T-SQL:Pouvez-vous effectuer des opérations agrégées complexes en utilisant NH3?
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
J'ai fait un certain nombre de tentatives d'essayer de construire un modèle d'objet et la carte à l'aide de NH3, puis construire une requête qui va construire cette syntaxe SQL, mais j'ai eu peu de succès.
Est-ce quelque chose qui est possible de faire en utilisant NH3? Si oui, y a-t-il un moyen de le faire dans LINQ? ou API Criteria? ou HQL?
À ce stade, je suis ouvert à tout. J'ai juste besoin d'être pointé dans la bonne direction parce que tous les trous de lapin que j'ai abattus jusqu'ici ne m'ont pas conduit nulle part.
LINQ J'ai essayé jusqu'à présent est la suivante:
//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();
J'ai aussi essayé avec un groupe en mais peu importe ce que je fais, NH3 lève toujours une exception si je me réfère à TableC dans plus de un agrégat. Si je l'ai seulement avec un agrégat, la requête s'exécute. Si j'essaye de le faire avec deux agrégats, j'obtiens une exception.