1. 程式人生 > 其它 >用 .SqlSugar ORM 實現行轉列

用 .SqlSugar ORM 實現行轉列

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)