SqlSugar的GroupBy和Sum用法

hello,大家好。我是闲齁齁,一枚用发量写代码的程序员。今天我做的功能模块里面涉及到了分组和求和这两个功能,于是我就翻阅了SqlSugar的文档来学习分组查询和使用。但是还是写出来了好多问题,接下来我就把问题和解决方法写出来,来帮小伙伴们避个雷。SqlSugar的官方文档我已经在下面打了出来。

http://www.donet5.com/Home/Doc?typeId=2243

首先按我以往的规矩来,先写接口,接口的代码还是和以前一样,不知道怎么写的小伙伴可以详细看一下我的第一篇文章。
写完接口就让我们写服务吧,我会先把我的代码写在下面并告诉大家哪里错了。

                    //异步要加入awaitvar dbResult = await Db.Queryable<实体表1, 实体表2, 实体表3, 实体表4>((f, u, a, b) => new JoinQueryInfos(JoinType.Left, f.1Id == u.Id,JoinType.Left, f.2Id == a.Id,JoinType.Left, f.3Id == b.Id))                        //.Where((f, u, a, b) => u.IsDelete == false).GroupBy((f, u, a, b)=> new {f.TypeName,f.TypeEncode,f.UnitId,f.WareHId,f.WareHModelId }).Select((f, u, a, b)=>SqlFunc.AggregateSum(f.RealNumber)).Select((f, u, a, b) => new InventoryMaterialDto{Id = f.Id,……})//    .MergeTable()//将查询结果转换成一个表在进行sum//     .GroupBy(it => new { it.TypeName, it.TypeEncode, it.unitsName, it.warehouseName, it.warehouseModelName })//    .Filter(null, true)//    .Select(it => new InventoryMaterialDto { //        RealNumber = SqlFunc.AggregateSum(it.RealNumber),           //        TypeName = it.TypeName, //        TypeEncode = it.TypeEncode,                          //        unitsName = it.unitsName,//        warehouseName=it.warehouseName,//        warehouseModelName = it.warehouseModelName//        }).ToPageListAsync(model.Page, model.Limit, totalCount);

看到这里不知道有没有细心的小伙伴发现问题,如果没发现的话我来给大家说一下吧。

.GroupBy((f, u, a, b)=> new {f.TypeName,f.TypeEncode,f.UnitId,f.WareHId,f.WareHModelId }).Select((f, u, a, b)=>SqlFunc.AggregateSum(f.RealNumber))

我把第一处错误已经沾过来了,那SqlSugar的文档上就是这样写的,哪里会错呢,大家可以看到,我用的还是赋值Dto的写法,但是这里对应的是查的多表,属于语法错误。
那接下来看我们是怎么解决的

     .MergeTable()//将查询结果转换成一个表在进行sum.GroupBy(it => new { it.TypeName, it.TypeEncode, it.unitsName, it.warehouseName, it.warehouseModelName }).Filter(null, true)//关闭过滤.Select(it => new InventoryMaterialDto { RealNumber = SqlFunc.AggregateSum(it.RealNumber),           TypeName = it.TypeName, TypeEncode = it.TypeEncode,                          unitsName = it.unitsName,warehouseName=it.warehouseName,warehouseModelName = it.warehouseModelName})

没错,我把这个Dto接管成一个表来进行GroupBy查询,然后根据我们的这个五个条件进行分组查询,然后计算RealNumber这个值的总和。当时的时候在这一步有出现了问题,运行的时候页面上显示IsDelete(字段名)无效,那么导致这个问题的原因就是我们的项目里面有个过滤功能,因为这是个Dto虚拟表,所以数据库没有这个表这个字段。于是我们就关闭掉过滤器。那么到现在是不是大家以为就没什么错误了,那怎么可能,作为专业的写Bug机器,运行的时候页面上居然又显示ExpandoObject对象无效,这一点我属实也没搞明白,不过大家遇到这个错误可以参考一下.net的文档。

https://docs.microsoft.com/zh-cn/dotnet/api/system.dynamic.expandoobject?view=net-5.0

活人还能让尿给憋死嘛,于是我直接删掉重写这一段。

 var dbResult = await Db.Queryable<实体表>().GroupBy(it => new { it.TypeEncode, it.TypeName, it.UnitId, it.WareHId, it.WareHModelId }).Select(it => new InventoryMaterialDto{RestNumber = SqlFunc.AggregateSum(it.RestNumber),RealNumber=SqlFunc.AggregateSum(it.RealNumber),OutNumber=SqlFunc.AggregateSum(it.OutNumber),LostNumber=SqlFunc.AggregateSum(it.LossNumber),PlanNumber=SqlFunc.AggregateSum(it.PlanNumber),TypeName = it.TypeName,TypeEncode = it.TypeEncode,unitsName = SqlFunc.Subqueryable<实体表2>().Where(s => s.Id == it.UnitId).Select(s => s.Name),warehouseName = SqlFunc.Subqueryable<实体表3>().Where(a=>a.Id==it.WareHId).Select(a=>a.TypeName),warehouseModelName = SqlFunc.Subqueryable<实体表4>().Where(b=>b.Id==it.WareHModelId).Select(b=>b.TypeName)}).ToPageListAsync(model.Page, model.Limit, totalCount);

这一次我并没有把Dto接管成一个表在进行GroupBy操作,而是直接对我们的实体表进行GroupBy操作,大家可以看到我在往Dto里面赋值的时候里面字段我用到了子查询。
使用这个方法我们的功能已经可以完美展现到页面上了,最后认识一下吧,我叫闲齁齁,一枚用发量写代码的程序员,期待与大家一起成长一起进步。

小白成长记(三、SqlSugar的sum用法)相关推荐

  1. 小白成长记第2期:简单易操的YouTube美金项目,get!

    这里是小白成长记,立志于帮助新人小白们成长,我是小白 之前小白一直在说国内的互联网创业项目,其实,不仅仅是国内,国外也会有一些好的项目,只要会简单的操作,就算是真小白也可以轻松操作.那么我们今天就来详 ...

  2. 小白成长记(一、ERP之增删改查)

    小白成长记(一.ERP之增删改查) 第一个项目-ERP之增删改查基本操作 hello,大家好.我是闲齁齁,一名刚工作六个月的.NET程序员,这篇文章主要用于记录我的第一个项目-ERP.我们的ERP主要 ...

  3. python 开课了_解答你学习Python的困惑,《Python小白成长记》开课啦

    原标题:解答你学习Python的困惑,<Python小白成长记>开课啦 继<Python轻松学>和<Python-turtle图形编程入门>两门Python课程后, ...

  4. python编程设计登录和注册程序_小白成长记-----python实现注册的小程序

    # 3.写一个注册的程序,输入username,密码, # 密码确认,输入的账号和密码不能为空,两次输入密码必须一致, # 用户名不能重复,错误次数四次 .注册成功提示成功 # 把注册账号密码信息的写 ...

  5. CV小白成长记之一:去除图片背景印记及噪点

    问题描述(一): 运用图像处理的方法去除上图中背景黑色字印记. 问题的分析与解决(一): 拿到这个问题,作为一个图像处理的小白,第一反应是能不能像使用PS一样,把这张RGB的图片转化为ARGB的图片. ...

  6. php理财逻辑流程,理财小白成长记之底层逻辑

    其实理财的种子很早就种下了,也许是从第一次看小狗钱钱开始,或者是上大学的时候第一听经济学原理的课程开始,但是真正正八经的行动是从生了孩子以后,才开始系统的学习理财的知识.记得当时银行的理财经理给我打电 ...

  7. ROS小白成长记之---工作空间移植问题

    今天看教学视频,根据教学视频把给的原码 catkin_ws及其src拷贝到自己电脑,在工作空间下catkin_make,报错: 小白的我果然一无所知,于是各种百度,终于找到一篇博客:https://b ...

  8. 科研小白成长记31——顶会到此一游

    按照自己以为的顶会标准写了一篇文章,准备投ECCV来着,导师觉得CVPR workshop更加合适,所以也就没浪费那个时间,直接投的workshop.投完是很纠结的,一方面,觉得自己论文还有一点点说不 ...

  9. c4dR19材质编辑器语言中文,C4D R19小白成长记(入门篇) 零基础学习Cinema 4d R19中文教程...

    开篇介绍为:本套教程共32集,由UTV章老师为零基础的学员量身打造,帮助初学者系统了解C4D的界面布局,建模.材质.灯光.运动图形.动力学.布料模拟.毛发模拟.运动跟踪.插件.渲染等基础知识点,并结合 ...

最新文章

  1. Linux设置qt-android开发环境
  2. nssl1447-小智的糖果【dp】
  3. String转Double
  4. 哪些人不能要 哪些人不能留
  5. iphone按钮圆角的问题
  6. Windows 10专业版下如何启用语音识别功能
  7. ros下各个包中的map的格式
  8. java摆渡人,视频丨越野怪兽 JAVA 摆渡人(ANIMA)山地车
  9. 旅游管理系统(包含旅游最短路径规划算法等,包含系统分析的各种uml图和界面图)
  10. 推荐一个商业级saas开源小程序电商java项目
  11. 易到完成股权变更 乐视仍未完全退出中信系入局
  12. [培养锻炼能力][耳机]耳机线断裂维修经验
  13. Excel快速拆分单元格内容
  14. 自己整理的资料 视频格式以及参数含义
  15. gerrit 描述信息批量导入导出
  16. Excel 插件使用教程
  17. python画三维(3D)图
  18. java程序获取某年某月的天数
  19. 使用英特尔® 图形性能分析器分析实际游戏性能
  20. Paper:研究生论文撰写(期刊论文与毕业论文简介、比较、写作流程)详细攻略

热门文章

  1. 操作教程:大华摄像头通过GB28181协议注册EasyCVR平台的详细配置
  2. 简笔画花边边框超简单_花边简笔画简单又漂亮 手抄报的边框图片大全
  3. Push to origin/master was rejected异常解决办法
  4. 前端开发社区,前端校招面试题及解析大全
  5. python模块安装_Python如何安装模块详细教程
  6. 18-Ansible常用模块-group模块
  7. 关于跨境电商你了解多少!我们应该怎么做跨境电商?(中)
  8. 棋牌游戏开发新转机 出海最佳国家有哪些
  9. 阿拉丁和神灯的故事(二)
  10. HDR视频色调映射算法(之二:Adaptive temporal TMO)