Ich versuche, diese SQL-Abfrage in NHibernate zu replizieren:Erhalten Sie alias für SelectSum
SELECT player.NAME,
Sum(achievement.value) AS 'Goals Scored'
FROM player
JOIN playerperformance
ON playerperformance.player_id = player.id
JOIN achievement
ON achievement.playerperformance_id = playerperformance.id
WHERE achievement.descriptor = 'Goals Scored'
GROUP BY player.NAME,
player.id
ORDER BY 'Goals Scored' DESC
Hier ist meine NHibernate LINQ-Abfrage:
_dataAccessor.QueryOver<Player>()
.Inner.JoinQueryOver<PlayerPerformance>(player => player.Performances)
.Inner.JoinQueryOver<Achievement>(perf => perf.Achievements,() => achievementAlias)
.Where(a => a.Descriptor == "Goals Scored")
.SelectList(list => list.SelectGroup(player => player.Id).SelectSum(() => achievementAlias.Value))
.OrderBy(a => a.Value).Desc
.List()
;
Dieses fast richtig ist. Aber der OrderBy geht falsch. Ich weiß nicht, was ich in das OrderBy-Lambda schreiben soll, das es auf dem Alias für den SelectSum(...)
-Teil ordnen würde. Es ist ein Alias in der generierten SQL:
SELECT this_.id AS y0_,
Sum(achievemen2_.value) AS y1_
FROM [player] this_
INNER JOIN [playerperformance] playerperf1_
ON this_.id = playerperf1_.player_id
INNER JOIN [achievement] achievemen2_
ON playerperf1_.id = achievemen2_.playerperformance_id
WHERE achievemen2_.descriptor = @p0
GROUP BY this_.id
ORDER BY achievemen2_.value DESC
Also alles, was ich tun muß, ist NHibernate zu überzeugen ORDER BY y1_
statt ORDER BY achievemen2_.Value
zu tun. Aber ich kann nicht herausfinden, wie man den Alias für die Summe bekommt.
Irgendwelche Ideen?