前言

  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上面,就能处理这种情况
  
 
 
 
 
 

FreeSql学习笔记——3.查询的更多相关文章

  1. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  2. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  3. MongoDB学习笔记六—查询下

    查询内嵌文档 数据准备 > db.blog.find().pretty() { "_id" : ObjectId("585694e4c5b0525a48a441b5 ...

  4. MongoDB学习笔记五—查询上

    数据准备 { , "goods_name" : "KD876", "createTime" : ISODate("2016-12- ...

  5. hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)

    一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...

  6. Oracle 学习笔记 常用查询命令篇

    1.查询某个用户下有多少张表 有时候很有用  select count(*) from dba_tables t where t.owner='SCOTT';

  7. Hibernate学习笔记--------4.查询

    一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...

  8. 【SQL】MySQL学习笔记1-----子查询

    1.什么叫子查询? 通俗的讲就是查询中有查询,SQL语句中有多个select语句. 2.什么地方可以嵌入子查询? SELECT 列 (不在标准之内) FROM 表 (可以嵌入,作为表存在) WHERE ...

  9. Entity Framework with MySQL 学习笔记一(查询)

    参考 : http://msdn.microsoft.com/en-us/data/jj574232.aspx EF 查询基本上有3中 默认是 Lazy Loading 特色是只有在需要数据的时候EF ...

  10. MySQL学习笔记(二)—查询

    一.多表连接查询 新建两张表t_user.t_order.              1.内连接      返回满足条件的所有记录. (1)显式内连接      使用inner join关键字,在on ...

随机推荐

  1. AtCoder Beginner Contest 295

    Three Days Ago 我们定义一个只由数字构成的字符串中的字符能够被重排成相同的两份,我们称这个字符串是个好字符串,比如12341234 现在给定一个字符串\(S\),找出所有的\([l,r] ...

  2. Javascript 常用封装(一)

    1.获取URL的query参数 作用:根据传入的属性名输出对应的值,没有则输出null 注意:url传参中包含中文时,默认的获取结果会乱码,需要进行解码 //解析query传参 url参数中含有中文时 ...

  3. 【相邻不同型贪心】LeetCode767 重构字符串

    题解 通常直接思考最佳策略是十分困难的,我们不妨思考每一种情况需要如何处理: 整个字符串只有一种字符 若字符串长度为 \(1\),那么字符串本身即为答案: 若字符串长度大于等于 \(2\),那么不存在 ...

  4. Shiro简单入门+个人理解

    身为一个刚刚进入开发行业的学生,进入公司就开始了Shiro框架的应用,特此在这里写下收获. Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权 ...

  5. .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门

    .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门 原文地址:https://devblogs.microsoft.com/dotnet/introducing-aspn ...

  6. 中电资讯 - 一路“标”升,喜迎Q3开门红

    Q2收获满满,Q3精彩再启! 近日,中电金信多项业务取得新进展 接连中标多个项目 中电金信数字科技集团旗下优智汇咨询中标浙江民泰商业银行信息科技战略发展规划(2022-2025)项目.优智汇将根据民泰 ...

  7. Yakit靶场-高级前端加解密与验签实战-全关卡通关教程

    一.前端验签-SHA256 本文作者为CVE-柠檬i CSDN:https://blog.csdn.net/weixin_49125123 博客园:https://www.cnblogs.com/CV ...

  8. mysql5.7配置文件详解

    8核心32G独立mysql服务器的配置文件如下: [client] port = 3306 socket = /data/mysql/mysql.sock [mysql] prompt = " ...

  9. 如何判断平台是x86还是arm

    case $(uname -m) in x86_64) echo x86;; aarch64) echo arm;; esac ref 上面的代码片改自这里 https://stackoverflow ...

  10. Ubuntu终端输入异常、无法退格(删除文本)、使用方向键命令

    1 起因 为了学习嵌入式开发安装去安装的ncurses库,使用命令:sudo apt-get install libncurses5-dev导致系统自带的ncurses-base被自动删除. 2 出现 ...