ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

用 .SqlSugar ORM 实现行转列

2021-07-07 10:02:28  阅读:361  来源: 互联网

标签:ColumnName db x2 转列 ORM time var x1 SqlSugar


1、SqlSugar.cs

SqlSugar作为一款.NET老牌ORM 并且也是 新手基数比较多的ORM。

2、SQL实现报表

1. Sql可以很方便的创建临时表并且关联

2.Sql语法事先行转列,列转行等一系列的操作

3、实例

1、正常写法

 1 var days = (time.AddMonths(1) - time).Days;//获取1月天数
 2 var dayArray = Enumerable.Range(1, days).Select(it=> time.ToString("yyyy-MM-"+it)).ToList();//转成时间数组
 3 var queryableLeft = db.Reportable(dayArray).ToQueryable<DateTime>();
 4 var queryableRight = db.Queryable<operateinfo>();
 5 var list = db.Queryable(queryableLeft, queryableRight, JoinType.Left,
 6     (x1, x2) => x1.ColumnName.Date==x2.operate_time.Date)
 7     .GroupBy((x1, x2) => x1.ColumnName)
 8     .Select((x1, x2) => new
 9     {
10         count = SqlFunc.AggregateSum(SqlFunc.IIF(x2.id > 0, 1, 0)),
11         day = x1.ColumnName.Day
12  
13     }).ToList();

 

 

 

 2、实现行转列

 

 1 var days = (time.AddMonths(1) - time).Days;//获取1月天数
 2 var dayArray = Enumerable.Range(1, days).Select(it=> time.ToString("yyyy-MM-"+it)).ToList();//转成时间数组
 3 var queryableLeft = db.Reportable(dayArray).ToQueryable<DateTime>();
 4 var queryableRight = db.Queryable<operateinfo>();
 5 var list = db.Queryable(queryableLeft, queryableRight, JoinType.Left,
 6     (x1, x2) => x1.ColumnName.Date==x2.operate_time.Date)
 7     .GroupBy((x1, x2) => x1.ColumnName)
 8     .Select((x1, x2) => new
 9     {
10         count = SqlFunc.AggregateSum(SqlFunc.IIF(x2.id > 0, 1, 0)),
11         day = x1.ColumnName.Day,
12         name="合计"
13  
14     }).ToPivotTable(it => it.day, it => it.name, it => it.Sum(x => x.count));

 

 

 

 

文章出处:用 .SqlSugar ORM 来实现报表功能 .NET CORE /.NET - 果糖大数据科技 - 博客园 (cnblogs.com)

 

标签:ColumnName,db,x2,转列,ORM,time,var,x1,SqlSugar
来源: https://www.cnblogs.com/houshanwen/p/14980142.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有