架框介绍

SqlSugar是一款.NET老牌ORM 并且也是 新手基数比较多的ORM(因为上手容易),SqlSugar之所以能一直更新到现在,还是要感谢SqlSugar的忠实用户,随着我的技术越来越好,加上用户量越来越多,我也越来越勤快,功能也越来越注重细节

查询体系

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

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

基础查询

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

多表查询

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

子查询

2个Queryable Join

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


业务查询

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

高级功能

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


Queryable

Select用法 一列、多列、匿名对象、多表映射等
Where用法 表达式、拼表达式、Sql、动态条件 等
生命周期 原理、引用类型、拷贝机制
执行查询

ToList  First  ToDateTable ToJson ToTree ToParentList ToSql  ToPivotList ToPivotTable

ToClassString  ToDictionary   ToDictionaryList   Count   Any  Sum

Max Min

报表

报表查询

让ORM可以方便的实现报表统计

Sql查询

Sql语句查询和分页

ORM实现报表

用ORM实现报表有2个短板

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

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

实践一、 按月统计没有记录为0

表结构如下

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

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

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

用SqlSugar轻松实现

var queryableLeft = db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>(); //生成月份
//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();  

实践二、 指定月统计

还是这张表和数据,下面数据只有2条还是不符合要求,应该是31条记录

用SqlSugar实现

            var days = (time.AddMonths(1) - time).Days;//获取2021年1月的总天数
var dayArray = Enumerable.Range(1, days).ToList();//转成int数组
var queryableLeft = db.Reportable(dayArray).ToQueryable<int>();
var queryableRight = db.Queryable<operateinfo>();
var list= db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x2.operate_time.Day==x1.ColumnName)
.GroupBy((x1,x2)=>x1.ColumnName)
.Select((x1, x2) => new
{
count=SqlFunc.AggregateSum(SqlFunc.IIF(x2.id>0,1,0)) ,
day=x1.ColumnName }).ToList();

  

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

     var days = (time.AddMonths(1) - time).Days;//获取1月天数
var dayArray = Enumerable.Range(1, days).ToList();//转成int数组
var queryableLeft = db.Reportable(dayArray).ToQueryable<int>();
var queryableRight = db.Queryable<operateinfo>();
var list= db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x2.operate_time.Day==x1.ColumnName)
.GroupBy((x1,x2)=>x1.ColumnName)
.Select((x1, x2) => new
{
count=SqlFunc.AggregateSum(SqlFunc.IIF(x2.id>0,1,0)) ,
day=x1.ColumnName }).ToPivotTable( it=>it.day,it=> it.count, it=>it.Sum(x=>x.count));

  

实践三、对象和表随意JOIN

比如我们创建一个List对象,我们这个List对象就能和表进行Join了

        var list = new List<OrderItem>() {
new OrderItem(){ CreateTime=DateTime.Now, OrderId=1, Price=100 },
new OrderItem(){ CreateTime=DateTime.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();

  

源码下载:

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

用 .SqlSugar ORM 来实现报表功能 .NET CORE /.NET的更多相关文章

  1. 高性能数据导入方案&表过滤器&一对多支持筛选- .NET SqlSugar ORM

    一.数据导入有哪些难题 1.数据分类 你需要将 插入.更新.忽略不计.错误数据 等进么分类汇总,最后返回给客户,如果没有很好的设计想把这些操作一步到位非常的难 2.高性能 对于插入或者更新 肯定不能单 ...

  2. SqlSugar ORM已经支持读写分离

    目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...

  3. SqlSugar ORM 入门到精通【一】入门篇

    背景 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手. 2.x版本正式在自已公司内部项目使用 3.x版本得到了更多公司的喜欢不过也会 ...

  4. Myeclipse2014 自带的报表功能 与 Eclipse BIRT

    Myeclipse2014 自带的报表功能跟 Eclipse BIRT 差不多,但不兼容   1.只能是MyEclipse Web projects 或者 Report Web project不支持B ...

  5. 记SqlSugar ORM框架之找不到主键问题

    前端时间在.NetCore项目中使用SqlSugar ORM框架(引用sqlSugarCore依赖包)的时候遇到了一个奇葩问题:对表进行数据更新操作的时候,报错 “ You cannot have n ...

  6. .Net Core 3.0 MVC 中使用 SqlSugar ORM框架

    介绍 SqlSugar 是一款简单易用的ORM ,在国内市场占有率也比较高, 在今年10月份官网改版后  提供了完整的服务,让您的项目没有后顾之忧 下载地址 :https://github.com/s ...

  7. 比较爽的导航查询 功能 - SqlSugar ORM

    1.导航查询特点 作用:主要处理主对象里面有子对象这种层级关系查询 1.1 无外键开箱就用 其它ORM导航查询 需要 各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用 ...

  8. Asp.Net 高性能ORM框架 SqlSugar.ORM 2.8

    3.0最新API: http://www.cnblogs.com/sunkaixuan/p/5911334.html 1.前言/Preface SqlSugar从去年到现在已经一年了,版本从1.0升到 ...

  9. ASP.NET - SqlSugar ORM框架 更新列表

    以后SqlSugar所有更新都会在这个贴子更新 SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSug ...

随机推荐

  1. 通过format学习,python的内部方法是面象对象的-python面向对象

    1.常用的形式 s ="{0} {0} qqq {0} xxx {1}".format('dog','cat')print(s) 结果:dog dog qqq dog xxx ca ...

  2. Ubuntu 20.04 配置多网卡链路聚合

    Ubuntu 20.04 配置多网卡链路聚合 多网卡IP配置 首先查看网卡信息 root@it:~# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65 ...

  3. shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

    shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...

  4. F5 BIG-IQ 8.0 发布 - 借助一个统一的管理平台,管理您的所有 BIG-IP 设备和服务

    针对完整可见性和控制的 BIG-IQ 集中式管理 BIG-IP 设备和服务的端到端控制 高效管理(编排.可见性和合规性)依赖于跨本地和云部署中始终如一的应用服务和安全策略.利用独立统一的管理平台实现对 ...

  5. WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。

    在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...

  6. 记一次zabbix-server故障恢复导致的事故 zabbix-server.log -- One child process died

    前言 zabbix-server昨天出了个问题,不停的重启.昨天摆弄到晚上也不搞清楚原因,按照网上说的各种操作,各种CacheSize.TimeOut.StartPollers都改了,还有什么Incl ...

  7. F5 api接口开发实战手册(二)

    F5 rest api 各对象使用方式详解 本篇文章介绍rest api接口下Collection.Resource.Subcollections.SubResource的各种使用方法.如果您不了解这 ...

  8. 排查利器:Tcpdump抓包 & Wireshark解析

    在工作这一块,免不了和其他开发人员打交道.比如,和其他部门 or 公司联调,甚至是和自己部门的人联调的时候.这时候,对接问题就很容易暴露出来,特别是Tcp/Udp会话的时候,很容易就会呈现出公说公有理 ...

  9. Selenium 库的基本用法

    Selenium库的基本使用   1.基本使用 from selenium import webdriver from selenium.webdriver.common.by import By f ...

  10. Python+Selenium - 定位策略

    一个元素定位可能会在多个地方用到,用loc变量接收元素的定位方式和相对路径.使用时再拆包(*loc) loc = (定位方式,'定位方式对应的元素路径')    =>元素定位方式及路径 driv ...