Sql 获取SelectSum的别名
我试图在NHibernate中复制此SQL查询:Sql 获取SelectSum的别名,sql,nhibernate,Sql,Nhibernate,我试图在NHibernate中复制此SQL查询: SELECT player.NAME, Sum(achievement.value) AS 'Goals Scored' FROM player JOIN playerperformance ON playerperformance.player_id = player.id JOIN achievement ON achievement.playerp
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
以下是我的NHibernate LINQ查询:
_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()
;
因此,我所需要做的就是说服NHibernate按y1进行排序,而不是按成就进行排序。但我想不出如何得到总和的别名
有什么想法吗?我想出来了
SelectSum(…)
有一个WithAlias
方法,因此我可以指向表示总和的整数别名。然后我不得不使用OrderByAlias(…)
而不是OrderBy(…)
:
int-sumalas=0;
_dataAccessor.QueryOver()
.Inner.JoinQueryOver(player=>player.performance)
.internal.JoinQueryOver(性能=>性能成就,()=>achievementAlias)
.其中(a=>a.描述符==“得分”)
.SelectList(list=>list.SelectGroup(player=>player.Id)。SelectSum(()=>achievementAlias.Value)。WithAlias(()=>sumAlias)
.OrderByAlias(()=>sumAlias).Desc
.List()
;
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
int sumAlias = 0;
_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).WithAlias(() => sumAlias)
.OrderByAlias(() => sumAlias).Desc
.List<object[]>()
;