FreeSql学习笔记——3.查询

前言

  FreeSql中查询的支持非常丰富,包括链式语法,多表查询,表达式函数;写法多种多样,可以使用简单的条件查询、sql查询、联表、子表等方式用于查询数据,
查询的格式也有很丰富,包括单条记录,列表、扩展分页、Dto映射,不可谓不强大。
 
 

简单查询

  使用Where方法传入条件,生成sql的条件查询
_freeSql.Select<Student>()
            .Where(x => x.Id > 10)
            .ToList();
//SELECT a.[Id], a.[Name], a.[Age], a.[Status], a.[AddTime], a.[Remark], a.[Version] FROM[Student] a WHERE(a.[Id] > 10)
 
 

查询指定字段

  需要返回的字段写在执行sql获取结果的方法中,最终返回一个匿名类
_freeSql.Select<Student>()
            .Where(x => x.Id > 10)
            .ToList(x => new { x.Id, x.Name });
//SELECT a.[Id], a.[Name] FROM[Student] a WHERE(a.[Id] > 10)
 
 
 

条件查询

List<long> rows = new List<long> { 1, 2, 3 };
_freeSql.Select<Student>()
            .Where(x => rows.Contains(x.Id))
            .ToList();
//SELECT a.[Id], a.[Name], a.[Age], a.[Status], a.[AddTime], a.[Remark], a.[Version] FROM[Student] a WHERE(((a.[Id]) in (1, 2, 3)))
 
 

分页查询👍

  分页查询使用Page(1,20)直接指定PageIndex和PageSize即可,总数通过Count()获取,分页API中还有Skip,Take,Offset,Limit用于分页
_freeSql.Select<Student>()
            .Page(2, 5)
            .Count(out var total)
            .OrderBy(x => x.Id)
            .ToList();
//SELECT a.[Id], a.[Name], a.[Age], a.[Status], a.[AddTime], a.[Remark], a.[Version]
//FROM[Student] a
//ORDER BY a.[Id]
//OFFSET 5 ROW
//FETCH NEXT 5 ROW ONLY
//total=15
 
 

分块查询ToChunk👍

  分块查询对大批量的数据很友好,可减少内存开销,每次只查指定条数,这就意味着会查询多次数据库,每次查询完把数据集插入列表
var studentList =new List<Student>();
_freeSql.Select<Student>().OrderBy(a => a.Id).ToChunk(5, done => {
    studentList.AddRange(done.Object);
    Console.WriteLine(JsonConvert.SerializeObject(done));
});
 
  上面一共15条记录,按照每次查询5条,一共查了三次,这里是三次的结果

 

Dto映射查询👍

  先创建一个StudentDto,设置了一个Student类中没有的RegistTime字段
查看代码
public class StudentDto
{
    public int Id { get; set; }

    public string Name { get; set; }

    public DateTime RegistTime { get;set; }
}
 
//未纠正映射
_freeSql.Select<Student>()
            .Where(x => x.Id == 10)
            .First<StudentDto>();
//{"Id":10,"Name":"小明8","RegistTime":"0001-01-01T00:00:00"}
  Dto与查询类型之间如果字段名不同,只能是默认值

//纠正映射
_freeSql.Select<Student>()
            .Where(x => x.Id == 10)
            .First(x=> new StudentDto { RegistTime=x.AddTime});
//{"Id":10,"Name":"小明8","RegistTime":"2022-05-19T11:16:44.447"}
 
  使用纠正映射,将Student.AddTime映射到StudentDto.RegistTime上面,就能处理这种情况
  
 
 
 
 
 
posted @ 2022-05-24 10:02  贰拾~  阅读(1557)  评论(0编辑  收藏  举报