C#   发布时间:2022-04-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用 .SqlSugar ORM 来实现报表功能 .NET CORE /.NET大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_616_0@架框介绍 @H_801_2@SqlSugar是一款.NET老牌ORM 并且也是 新手基数比较多的ORM(因为上手容易),SqlSugar之所以能一直更新到现在,还是要感谢SqlSugar的忠实用户,随着我的技术越来越好,加上用户量越来越多,我也越来越勤快,功能也越来越注重细节

@H_801_2@ 

@H_616_0@查询体系 @H_801_2@用开源框架最怕遇到的就是想用一个功能发现没有,这个有时候就会非常麻烦,或者有这个功能发现不好用,SqlSugar是经过7年来真实的需求量身定制的,可以说在功能方面都比

@H_801_2@EF CORE更加实用也不为过,一图看懂 SqlSugar查询功能

@H_801_2@ 基础查询

基础查询 查询单条、主键查询、查所有、模糊查询、排序、TOP 、Count、IN等等操作
分页查询 分页查询
分组查询 分组查询和去重复  Group by   DisTinct
排序  Order by  、随机排序、动态排序
@H_801_2@ 多表查询@H_874_51@

联表查询 使用Left Join  Inner Join进行查询
配置查询 简化联表操作,解决字典联表和简单Name联表问题
@H_801_2@ 子查询

@H_801_2@ 2个Queryable Join

查询中套查询,2个结果集进行JOIN等操作
导航查询 一对多 、一对一、多对多操作 ,有层级的查询
并集查询 union all
树型查询 查询出一个树形结构,比如菜单
@H_801_2@ 业务查询

无实体查询 没有实体查询
表格查询 前端组装好查询条件,后台直接使用
全局过滤器 比如很多地方用到假删除,那么我们可以配置加上Isdeleted
多库查询 如果表结构一样,那我们可以用一个实体操作不同表
@H_801_2@ 高级功能

二级缓存 支持redis等缓存,让你不需要维护 CacheKey轻松使用缓存来提高服务器性能
异步查询  使用异步进行查询
Sqlfun函数 使用sqlSugar自带的数据库函数查询
扩展Sql函数 当有些ORM不能解析的功能,可以自已封装SQL函数
@H_801_2@ Queryable@H_874_51@

SELEct用法 一列、多列、匿名对象、多表映射等
Where用法 表达式、拼表达式、Sql、动态条件 等
生命周期 原理、引用类型、拷贝机制
执行查询 @H_801_2@  ToList  First  ToDateTable ToJson ToTree ToParentList ToSql  ToPivotList ToPivotTable

@H_801_2@  ToClassString  ToDictionary   ToDictionaryList   Count   Any  Sum

@H_801_2@  Max Min

@H_801_2@报表

报表查询 @H_801_2@让ORM可以方便的实现报表统计

Sql查询 @H_801_2@sql语句查询和分页

@H_616_0@  @H_616_0@ORM实现报表  @H_801_2@用ORM实现报表有2个短板

@H_801_2@1. Sql可以方便的 创建临时表并且可以将这些临时表进行 JOIN 操作

@H_801_2@2.Sql可以方便的实现行列互转操作

@H_801_2@ 

@H_616_0@实践一、 按月统计没有记录为0 @H_801_2@表结构如下

@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@我们用Gropby实现查询,发现结果就只有3条记录,其中2月份就没有数据,那么这个Sql就不符合要求

@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@这个时候我们就需要生成一个月份临时表

@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@然后上面的表在和临时表 进行JOIN 在分组,会不会认为Sql也挺麻烦的呢?

@H_801_2@@H_839_262@用SqlSugar轻松实现@H_874_51@

var queryableLeft = db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<datetiR_895_11845@e>(); //生成月份
//ReportableDateType.MonthsInLast1yea 表式近一年月份 并且queryable之后还能在where过滤
var queryableRight = db.Queryable<operateinfo>(); //声名表

//月份和表JOIN
var list= db.Queryable(queryableLeft, queryableRight, JoinType.Left, (x1, x2) => x2.operate_time.ToString("yyyy-MM")== x1.columnName .ToString("yyyy-MM")) 
.GroupBy((x1,x2)=>x1.columnName) 
.SELEct((x1, x2) => new { 
                     count=SqlFunc.AggregateSum(SqlFunc.IIF(x2.id>0,1,0)) , //null的数据要为0所以不能用count
                     date=x1.columnName.ToString("yyyy-MM") }
).ToList();  
@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@ 

@H_616_0@实践二、 指定月统计 @H_801_2@ 还是这张表和数据,下面数据只有2条还是不符合要求,应该是31条记录

@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@@H_839_262@用SqlSugar实现@H_874_51@

@H_801_2@ 

            var days = (time.AddMonths(1) - timE).Days;//获取1月天数
            var dayArray = Enumerable.Range(1, days).SELEct(it=> time.ToString("yyyy-MM-"+it)).ToList();//转成时间数组
            var queryableLeft = db.Reportable(dayArray).ToQueryable<datetiR_895_11845@e>();
            var queryableRight = db.Queryable<operateinfo>();
            var list = db.Queryable(queryableLeft, queryableRight, JoinType.Left,
                (x1, x2) => x1.columnName.Date==x2.operate_time.DatE)
                .GroupBy((x1, x2) => x1.columnName)
                .SELEct((x1, x2) => new
                {
                    count = SqlFunc.AggregateSum(SqlFunc.IIF(x2.id > 0, 1, 0)),
                    day = x1.columnName.Day

                }).ToList();
@H_801_2@ 

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

  

@H_801_2@结果出来了,我们还能做的更好点在进行一下行转列

            var days = (time.AddMonths(1) - timE).Days;//获取1月天数
            var dayArray = Enumerable.Range(1, days).SELEct(it=> time.ToString("yyyy-MM-"+it)).ToList();//转成时间数组
            var queryableLeft = db.Reportable(dayArray).ToQueryable<datetiR_895_11845@e>();
            var queryableRight = db.Queryable<operateinfo>();
            var list = db.Queryable(queryableLeft, queryableRight, JoinType.Left,
                (x1, x2) => x1.columnName.Date==x2.operate_time.DatE)
                .GroupBy((x1, x2) => x1.columnName)
                .SELEct((x1, x2) => new
                {
                    count = SqlFunc.AggregateSum(SqlFunc.IIF(x2.id > 0, 1, 0)),
                    day = x1.columnName.Day,
                    name="合计"

                }).ToPivotTable(it => it.day, it => it.name, it => it.Sum(x => x.count));
@H_801_2@

用 .SqlSugar ORM 来实现报表功能  .NET CORE /.NET

@H_801_2@ 

@H_801_2@ 

@H_616_0@实践三、对象和表随意JOIN @H_801_2@比如我们创建一个List对象,我们这个List对象就能和表进行Join了

        var list = new List<OrderItem>() { 
              new OrderItem(){ CreateTime=datetiR_895_11845@e.Now, OrderId=1, Price=100 },
              new OrderItem(){ CreateTime=datetiR_895_11845@e.Now, OrderId=2, Price=120 }
            };
            var query1 = db.Queryable<Order>();
            var queryable2 = db.Reportable(list).ToQueryable();
            var x = db.Queryable(query1, queryable2, (x1, x2) => x1.Id.Equals(x2.orderId))
                .SELEct((x1, x2) => new { name = x1.Name,id=x1.Id, orderid = x2.orderId }).ToList();
@H_801_2@  

源码下载:

@H_801_2@https://github.com/donet5/SqlSugar   记得点赞和推荐 SqlSugar将会一直更新,你的赞和推荐就是我最好的动力

大佬总结

以上是大佬教程为你收集整理的用 .SqlSugar ORM 来实现报表功能 .NET CORE /.NET全部内容,希望文章能够帮你解决用 .SqlSugar ORM 来实现报表功能 .NET CORE /.NET所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: