当我们查询之前,我们先构造一个查询对象的输出DTO。如下图代码:
public class TScoreSearchDto { /// <summary> /// 分数 /// </summary> public Int32 FScore { get; set; } /// <summary> /// 学生名称 /// </summary> public String studentName { get; set; } /// <summary> /// 班级名称 /// </summary> public String className { get; set; } /// <summary> /// 年级名称 /// </summary> public String gradeName { get; set; } }
当我们构建完DTO 输出Dto 后,我就可以pagequery 最后查询的到数据集(DataTable) 通过 DataTable 的 ToList 扩展方法 轻而易举的转换到List 数据集合中,供上层使用。如下代码的最后一行所示:
public List<TScoreSearchDto> getScoreList() { #region //聚联条件分页查询 var type = 1; //非关键代码,用于下面演示代码用 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 (!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 }