【Freesql】实现动态分组(groupby)

应用场景 :
分组条件是a,b,c,d的任意组合,来自前端,前端选了 a就只分组a,选了 a,b就分组a,b
(select 部分也是来自前端,前端选了 a就只查a,选了 a,b就只查a,b
select a,b,c,d,... from xxx
group by a,b,c,d

以下方法适用于mysql

在mysql中group by 可以不用指定列名,但pgsql必须声明列名。

.GroupBy(x => new
{
    O_ID = req.groupParams.djjg == 1 ? x.O_ID : null,
    xzqh_id = req.groupParams.ywssqh == 1 ? x.xzqh_id : null,
    qllx = req.groupParams.qllx == 1 ? x.qllx : null,
    djlx = req.groupParams.djlx == 1 ? x.djlx : null
})
.ToList(x => new Dto
{
    djjg = x.Key.O_ID,
    djlx = x.Key.djlx,
    ywssqh = x.Key.xzqh_id,
    qllx = x.Key.qllx,
    bjsl = (int)x.Sum(x.Value.bjsl)
});

对上面方法pgsql需要调整:

2024-05-15 调整如下

.GroupBy(x=>new {

a=req.groupParams.a==1?x.a:"a",

b=req.groupParams.b==1?x.b:"b",

c=req.groupParams.c==1?x.c:"c"

}).ToList(x=>new Dto{

a=req.groupParams.a==1?x.Key.a:null,

b=req.groupParams.b==1?x.Key.b:null,

c=req.groupParams.c==1?x.Key.c:null

});

如果有多次groupby,则as的别名和select 别名要能对应,下面例子就是一个groupby三次的动态分组。(注意freesql的参数化)

group by 怎么动态分组? · Discussion #1038 · dotnetcore/FreeSql · GitHub

,欢迎大家讨论(freesql官方Q群:52508226)

GitHub - dotnetcore/FreeSql: 🦄 .NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, Click house orm, MsAccess orm.icon-default.png?t=N7T8https://github.com/dotnetcore/FreeSqlFreeSql 官方文档FreeSql Documentsicon-default.png?t=N7T8http://freesql.net/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值