• 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上面,就能处理这种情况
      
     
     
     
     
     
  • 相关阅读:
    Floydtemplate 示例
    dfa hdu 2222 AC自动机示例
    oj 中的 G++ 与 C++ 的区别
    System.Diagnostics.Process.Start(Info)
    自动关闭messagebox
    获取外部程序进程的SQL语句
    php 阿拉伯数字转中文数字 方法
    最新jQuery CHM版中文帮助文档
    parent.myFrame.cols ff 子窗体取得(访问)父窗体中另一子窗体的ID
    Jquery JS 正确的比较两个数字大小的方法
  • 原文地址:https://www.cnblogs.com/zousc/p/16304453.html
Copyright © 2020-2023  润新知