1. 程式人生 > 實用技巧 >Bitter.Core系列九:Bitter ORM NETCORE ORM 全網最粗暴簡單易用高效能的 NETCore 之 WITH 子句支援

Bitter.Core系列九:Bitter ORM NETCORE ORM 全網最粗暴簡單易用高效能的 NETCore 之 WITH 子句支援

有時我們在聚合查詢中,經常會有複雜的聚聯查詢。有時表的聚聯查詢SQL 子句比較複雜,DBA 會經常告訴們,能否通過WITH 子句優化。WITH 子句,是對SQL 聚聯查詢的優化。Bitter.Core 支援對MSSQL WITH 子句的支援。示例程式碼如下:

示例DEMO:

public static List<TScoreSearchDto> With_Page_Demo(int type, string studentname)
        {
            #region //聚聯條件分頁查詢  年級的LEFT JOIN 子語句 使用WITH 來替代

            var
withsql = @"WITH grade as(select* from t_Grade where fid=@id)"; //定義WITH 子句 var sql = @"SELECT score.FScore,student.FName as studentName,class.FName as className,grade.FName as gradeName FROM dbo.t_StudentScore score LEFT JOIN dbo.t_student student ON score.FStudentId = student.FID LEFT JOIN dbo.t_class class ON student.FClassId=class.FID LEFT JOIN grade ON grade.FID=class.FGradeId
"; PageQuery pq = new PageQuery(sql, null); pq.AddPreWith(withsql, new { id = 3 }); pq.Where("1=1"); if (type == 1) { pq.Where("score.FScore>60 "); } if (type == 2) { pq.Where(
"score.FScore>60 and score.FScore<80 "); } if (!string.IsNullOrEmpty(studentname)) { pq.Where(" student.FName like '%' + @FScoreName + '%'", new { FScoreName = studentname }); } //通過ThenAsc 方法指定欄位排序 pq.ThenASC("score.FScore "); //通過ThenDESC 方法指定欄位排序 pq.ThenDESC("student.FName"); //自己直接指定排序欄位和排序關鍵詞 pq.OrderBy("student.FAddTime desc"); //分頁指定 Skip: 當前頁,Take :每頁數量 pq.Skip(1).Take(10); var dt = pq.ToDataTable(); //獲取資料 var studentscount = pq.Count(); //獲取當前條件下的數量 return dt.ToListModel<TScoreSearchDto>(); //ToList<T>() DataTable-->List<T> 的模型轉換 #endregion }


上面的示例程式碼備註圖: