Bitter.Core 在聚聯/分頁聚聯查詢的時候,采用原生的MSSQL, MYSQL 陳述句查詢,做過復雜高級專案的人知道,原生的聚合查詢代碼執行效率更高,更快,更容易書寫,開發量最少,
借助原生的MSSQL,MYSQL 客戶端工具,將聚合查詢的SELECT 陳述句寫好,直接扔進Bitter ORM 框架就行了,
業務層只關心寫好相對應的 SELECT SQL 陳述句. 如下代碼示例:
#region //聚聯條件分頁查詢 var type = 1; //非關鍵代碼,用于下面演示代碼用 var Score=100; var studentname = "H"; //非關鍵代碼,用于下面演示代碼用 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 dbo.t_Grade grade ON grade.FID=class.FGradeId "; PageQuery pq = new PageQuery(sql, null); 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 (type == 3) { pq.Where("score.FScore==@ParmeScore",new {ParmeScore=Score}}); } 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(); //獲取當前條件下的數量 #endregion
非常關鍵:
/** * 非常關鍵(Notic): PageQuery pq = new PageQuery(sql,null) 中的 sql 變數 不能包含 WHERE 條件,但是 LEFT JOIN\INNER JOIN\UNION JOIN\OUTER JOIN 的子陳述句的 WHERE 條件是可以出現的,需要 WHERE ,統一通過 pq.Where() 進行條件加載, * 如果有疑問,可以 github 上留言,或者直接留言,Tks. 例如(正確):sql=@" SELECT score.FScore,student.FName,class.FName,grade.FName 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 dbo.t_Grade grade ON grade.FID=class.FGradeId"; 例如(正確):sql=@" SELECT score.FScore,student.FName,class.FName,grade.FName 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 (SELECT * FROM t_Grade WHERE FScore>15) grade ON grade.FID=class.FGradeId "; 例如(錯誤):sql=@" SELECT score.FScore,student.FName,class.FName,grade.FName 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 dbo.t_Grade grade ON grade.FID=class.FGradeId WHERE score.FScore>10 AND score.FScore<60"; * * */
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/249264.html
標籤:.NET技术
上一篇:動態加載及呼叫程式集
下一篇:Bitter.Core系列六:Bitter ORM NETCORE ORM 全網最粗暴簡單易用高性能的 NETCore ORM 之 示例 DataTable 模型轉換
