gpt4 book ai didi

c# - NHibernate SQLFunction 分组依据

转载 作者:行者123 更新时间:2023-11-29 05:23:03 25 4
gpt4 key购买 nike

我正在尝试做这样的事情:

SELECT round(song.rating), count(song.song_id) FROM song
GROUP BY round(song.rating);

我的查询:

 var output = sess.QueryOver<song>()
.SelectList(list => list
.Select(Projections.SqlFunction("round", NHibernateUtil.Int32, Projections.GroupProperty("rating")))
.SelectCount(s => s.song_id))
.List<object[]>()
.Select(prop => new RatingStat
{
rating = (int)prop[0],
count = (int)prop[1]
}).ToList<RatingStat>();

预期输出:

+---------------------------+---------------------------+
| 0 | 12 |
| 1 | 1 |
| 3 | 1 |
| 4 | 6 |
| 5 | 3 |
| 6 | 6 |
| 7 | 12 |
| 8 | 7 |
| 9 | 9 |
| 10 | 2 |
+---------------------------+---------------------------+

实际输出:

0                         12
1 1
3 1
4 1
4 3
4 1
4 1
5 1
5 1
5 1
6 2
6 1
6 3
7 2
7 9
7 1
8 1
8 3
8 2
8 1
9 1
9 3
9 1
9 4
10 2

我正在使用从 MySQL5Dialect 继承的我自己的方言,因为我的 MySQL 方言不支持 round 函数。以下是在我的方言中如何定义 round 函数:

 RegisterFunction("round", new StandardSafeSQLFunction("round", NHibernateUtil.Int32,1));

我的问题是,为什么我有多个评分值相同的组?四舍五入的值应该是不同的。圆形功能是否可能无法正常工作?编辑:添加生成的 SQL 语句

 SELECT round(this_.rating) as y0_, count(this_.song_ID) as y1_ FROM song this_ GROUP BY this_.rating

最佳答案

找到的解决方案:

 var t = Projections.SqlFunction("round", NHibernateUtil.Int32, Projections.GroupProperty("rating"));
var output = sess.QueryOver<Song>()
.SelectList(list => list
.Select(Projections.SqlFunction("round", NHibernateUtil.Int32, Projections.GroupProperty(t)))
.SelectCount(s => s.song_id))
.List<object[]>()
.Select(prop => new RatingStat
{
rating = (int)prop[0],
count = (int)prop[1]
}).ToList<RatingStat>();

关于c# - NHibernate SQLFunction 分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com