Car*_*arl 2 .net c# sql-server nhibernate
我有NHibernate的问题,我似乎无法找到一个简单的方法.
我有以下数据库:
游戏:ID,分数,Match_ID
匹配:ID
一场比赛包括3场比赛.
我想找出最大匹配分数是什么,所以下面的SQL可以解决这个问题:
select max(a.total) from
(select Match.ID, sum(Game.Score) as total
from Game inner join Match
on Game.Match_ID = Match.ID
group by Match.ID) a
Run Code Online (Sandbox Code Playgroud)
在NHibernate中,这看起来有点棘手.显然,HQL不允许from子句中的子查询,所以我不能真正使用它.
我很确定它可以用ICriteria完成,但我刚刚开始使用NH,所以我似乎无法弄明白.我基本上得到了以下内容:
Session.CreateCriteria<Game>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("Match"))
.Add(Projections.Sum("Score"))).List();
Run Code Online (Sandbox Code Playgroud)
在那之后,我玩了各种各样的DetachedCriteria,但似乎只是围成一圈.
对于HQL世界,单个查询可以解决问题......
var maxScore = session.CreateQuery(@"select sum(game.Score)
from Game game
group by game.Match
order by sum(game.Score) desc")
.SetMaxResults(1)
.UniqueResult<long>();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助..
更新:对于Criteria世界,可能有更好的结果转换,但这只是工作:)
var max = (int)session.CreateCriteria<Game>("game")
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("game.Match"))
.Add(Projections.Sum("game.Score"), "total"))
.AddOrder(Order.Desc("total"))
.SetMaxResults(1)
.SetResultTransformer(Transformers.AliasToEntityMap)
.UniqueResult<IDictionary>()["total"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4313 次 |
| 最近记录: |