FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList
贪婪加载顾名思议就是把所有要加载的东西一次性读取。
本节内容为了配合【延时加载】而诞生,贪婪加载和他本该在一起介绍,开发项目的过程中应该双管齐下,才能写出高质量的程序。
Dto 映射查询
Select<Tag>().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
Select<Tag>().Limit(10).ToList(a => new TestDto());
Select<Tag>().Limit(10).ToList(a => new TestDto { });
Select<Tag>().Limit(10).ToList(a => new TestDto() { });
Select<Tag>().Limit(10).ToList<TestDto>();
这种映射支持单表/多表。
查找规则,查找属性名,会循环内部对象 _tables(join 查询后会增长),以 主表优先查,直到查到相同的字段。
如:
A, B, C 都有 id,Dto { id, a1, a2, b1, b2 },A.id 被映射。也可以指定 id = C.id 映射。
友情提醒:在 dto 可以直接映射一个导航属性
导航属性 ManyToOne/OneToOne
ManyToOne/OneToOne 导航属性通过 ToList() 加载,这个方法有一个参数:includeNestedMembers。
参数说明:
false: 返回 2级 Join 的数据;
true: 返回所有层级深度 Join 的导航数据;
如果查询中已经使用了 a.Parent.Parent 类似表达式,则可以无需 LeftJoin 等操作。
如:
Select<Tag>().Where(a => a.Parent.Name == "1").ToList();
//这样写,不需要再标记 Join,解析表达式时自动处理成 LeftJoin
如果导航属性没有使用,又想加载,可使用 Include 方法。
Select<Tag>().Include(a => a.Parent).ToList();
导航属性 OneToMany/ManyToMany
IncludeMany 贪婪加载集合的导航属性,其实是分两次查询,在 ToList 后进行了数据重装。
Select<Tag>().IncludeMany(a => a.Songs).ToList();
//这是 ManyToMany 关系的贪婪加载
OneToMany 的使用方法相同
IncludeMany 有第二个参数,可以进行二次查询前的修饰工作。
Select<Tag>().IncludeMany(a => a.Songs, then => then.Where(song => song.User == "admin")).ToList();
然后,其实在 then 那里,还可以继续进行向下 Include/IncludeMany。只要你喜欢,向下 100 层都没问题。
变异
变异的 IncludeMany,即使选择的不是导航属性,也可以贪婪加载。
Select<Tag>().IncludeMany(a => a.TestManys.Where(b => b.TagId == a.Id));
支持联合键关系指定
比如 EFCore include 吧,如何只查询每项子集合的前几条数据,它只可以加载所有导致IO性能低下(如果某些子集合,有100条,200条),FreeSql 可以解决这个问题。
Select<Tag>().IncludeMany(a => a.TestManys.Take(10));
系列文章导航
(一)入门
(二)自动迁移实体
(三)实体特性
(四)实体特性 Fluent Api
(五)插入数据
(六)批量插入数据
(七)插入数据时忽略列
(八)插入数据时指定列
(九)删除数据
(十)更新数据
(十一)更新数据 Where
(十二)更新数据时指定列
(十三)更新数据时忽略列
(十四)批量更新数据
(十五)查询数据
(十六)分页查询
(十七)联表查询
(十八)导航属性
(十九)多表查询
(二十)多表查询 WhereCascade
(二十一)查询返回数据
(二十二)Dto 映射查询
(二十三)分组、聚合
(二十四)Linq To Sql 语法使用介绍
(二十五)延时加载
(二十六)贪婪加载 Include、IncludeMany、Dto、ToList
(二十七)将已写好的 SQL 语句,与实体类映射进行二次查询
(二十八)事务
(二十九)Lambda 表达式
(三十)读写分离
(三十一)分区分表
(三十二)Aop
(三十三)CodeFirst 类型映射
(三十四)CodeFirst 迁移说明
(三十五)CodeFirst 自定义特性
转载于:https://www.cnblogs.com/FreeSql/p/11531404.html
FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList相关推荐
- FreeSql (十六)分页查询
IFreeSql fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "Data ...
- OpenGL教程翻译 第二十二课 使用Assimp加载模型
第二十二课 使用Assimp加载模型 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) 背景 到现在为止我们都在使用手动生成的模型.正如你所想的,指明每个顶点 ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- Shell脚本学习-阶段二十六-Web服务与端口
文章目录-Shell阶段二十六-端口与服务对照表 前言 端口与Web服务对照表 简介 前言 端口与Web服务对照表 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口: ...
- 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现
无人驾驶汽车系统入门(二十六)--基于深度学习的实时激光雷达点云目标检测及ROS实现 在前两篇文章中,我们使用PCL实现了在点云中对地面的过滤和点云的分割聚类,通常来说,在这两步以后我们将对分割出来的 ...
- JAVA面经复习(二十六)面试难度:☆☆☆☆
JAVA面经复习(二十六)面试难度:☆☆☆☆ 面试难度:☆☆☆☆ 推荐指数:☆☆☆☆☆ 推荐原因:总体来说本篇面经难度不高,且基本都是基础知识,不涉及复杂的分布式应用的工具,适合新手复习. 声明:答案 ...
- JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇
二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...
- 2021年大数据Hadoop(二十六):YARN三大组件介绍
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...
- EntityFramework(EF)贪婪加载和延迟加载的选择和使用
贪婪加载:顾名思议就是把所有要加载的东西一 次性读取 1 using (var context = new MyDbContext()) 2 { 3 var orders = from o in co ...
最新文章
- 15分钟带你入门sklearn与机器学习——分类算法篇
- Open-E DSS V7 应用系列之六 构建软件iSCSI
- opencv的ROI操作
- Py之cython:python库之cython的简介、安装、使用方法之详细攻略
- 解决标签回车后产生的空格
- 贪吃蛇一直显示正在连接服务器,贪吃蛇大作战进不去怎么办 解决方法
- InnoDB原理篇:如何用好索引
- AIR切换SDK版本时遇到的问题
- 【操作系统/OS笔记19】数据块缓存
- C# 获取文件路径大全
- gnu nano显卡测试软件,买不到了 篇四:站内首发——RX VEGA NANO评测
- 适合长期电脑办公人群的养生小技巧
- 光学系统设计学习笔记1
- 我是如何从流水线工人到程序员?(2008-2018)
- SpringCloud 微服务工具集 SpringCloud 版本: Hoxton SR6
- 阿啊-有意思的表情包
- Wordpress站点使用七牛云对象储存以及CDN加速
- LCA(倍增+Tarjan)和BFS、DFS以及Prim、Kruskal
- myaql数据库如何建表
- 南卡VS明基护眼台灯对比评测,2022买哪款护眼灯比较好?
热门文章
- CCIE-LAB-第九篇-BGP下一跳+EBGP防环+伪装AS+通过标签过滤路由
- Processing 闪烁的圆 动画效果
- 【机器学习】 - 关于图像质量评价IQA(Image Quality Assessment)
- 【UVA - 10037】Bridge(过河问题,经典贪心)
- 【51Nod - 1268】和为K的组合 (背包 或 dfs)
- 【CF#468 div2 D. 】Peculiar apple-tree(思维)
- 动手学无人驾驶(6):基于IMU和GPS数据融合的自车定位
- Leetcode刷题实战(1):Two Sum
- java爬虫获取div内容_Java爬虫-简单解析网页内容
- 操作表格_Excel表格基础操作-新手入门级