【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列

   .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET开源 ORM 框架 SqlSugar 系列
  11. 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  12. 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  13. 【导航查询】.NET开源 ORM 框架 SqlSugar 系列
  14. 【子查询】.NET开源 ORM 框架 SqlSugar 系列
  15. 【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
  16. 【配置查询】.NET开源 ORM 框架 SqlSugar 系列
  17. 【并集查询】.NET开源 ORM 框架 SqlSugar 系列

💥 SqlSugar 嵌套查询是SQL中一种常用的查询方法,它允许你在一个查询中嵌入另一个查询的结果作为其条件。嵌套查询通常使用 IN , EXISTS ,  ANY/SOME ,和  ALL 这些操作符来实现。

1、嵌套联表 🎀 

1.1 Queryable 和表 JOIN

📢 注意事项:

🔸 mergetable 之前要有 Select

🔸合并成一个表 ( MergeTable 之前不能有 OrderBy )

🔸5.1.3.41版本只有 Where 可以不写 MergeTable

//写法1
var queryable=db.Queryable<Order>();
var list=db.Queryable(queryable).LeftJoin<OrderDetails>((o,d)=>o.id==d.orderid).Select(o=>o).ToList();//写法2
db.Queryable<Order>().Select<Order>()//mergetable之前要有Select.MergeTable()//合并成一个表 (MergeTable之前不能有OrderBy)
.LeftJoin<OrderDetails>((o,d)=>o.id==d.orderid).Select(o=>o).ToList();//5.1.3.41版本只有Where可以不写MergeTable
db.Queryable<Order>().Where(it=>o.id==1)
.LeftJoin<OrderDetails>((o,d)=>o.id==d.orderid).Select(o=>o).ToList();//匿名对象看标题2

1.2 表和Queryable JOIN

var queryableRight = db.Queryable<OrderItem>().Where(x => x.OrderId > 0);
var list=db.Queryable<Order>().LeftJoin(queryableRight,(o,d)=>o.Id == d.OrderId).Select(o=>o).ToList();

1.3 多个Queryable JOIN

新语法:

 var q11 = db.Queryable<Order>().Where(it => it.Id>1);var q22 = db.Queryable<Order>().Where(it => it.Id > 2);var q33 = db.Queryable<Order>().Where(it => it.Id > 3);var list= q11.LeftJoin(q22, (x, y) => x.Id == y.Id).LeftJoin(q33, (x, y, z) => x.Id == z.Id).ToList();

老语法:

最多支持3个 Queryable JOIN 有重载(5.0.6.5支持到4个) F12看重载

var query1 = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.SchoolId==sc.Id)).Where(st => st.Name == "jack");var query2 = db.Queryable<DataTestInfo>();db.Queryable(query1, query2,JoinType.Left, (p1, p2) => p1.Id == p2.Int1).Select<ViewModelStudent>().ToList();//SELECT * FROM //    (SELECT          [st].[ID],[st].[SchoolId],[st].[Name],[st].[CreateTime] //                  FROM [STudent] st //                Left JOIN [School] sc ON ([st].[SchoolId]=[sc].[Id] )   //               WHERE ( [st].[Name] = @Name0Join0 ))  p1 ////  LEFT JOIN// (SELECT          [Int1],[Int2],[String],[Decimal1],[Decimal2],//                [Datetime1],[Datetime2],[Image1],[Image2], //               [Guid1],[Guid2],[Money1],[Money2],[Varbinary1],//                  [Varbinary2],[Float1],[Float2] FROM [DataTestInfo] )p2   //     ON ( [p1].[ID] = [p2].[Int1] )

1.4 表和SQL JOIN  

新语法糖  5.0.4.3 preview-05  nuget 勾选允许预览版

 //SqlQueryable就是一个Sql转成Queryablevar list= db.SqlQueryable<Student>("select * from student").Where(it=>it.Id==1).ToPageList(1, 2);//具体用例:db.Queryable<Order>().LeftJoin(db.SqlQueryable<Custom>("select * from Custom"), (o, i) => o.CustomId == i.Id) .Select(o => o).ToList();//SELECT o.* FROM [Order] o Left JOIN (select * from Custom) i ON ( [o].[CustomId] = [i].[Id] )//5.1.3.41支持了反过来用
db.SqlQueryable<Custom>("select * from Custom").LeftJoin...

1.5 表和List<T>对象 JOIN

 var queryable = db.Reportable(List<实体>).ToQueryable();var list= db.Queryable<Order>().InnerJoin(queryable, (x1, x2) => x1.Id == x2.OrderId).Select((x1, x2) => new { name = x1.Name, id = x1.Id, orderid = x2.OrderId }).ToList();

2、匿名类型嵌套联表 🎀

📢 注意事项:

🔸如果有 OrderBy 请写在 MergeTable 后面

🔸合并成新表 MergeTable OrderItem 进行 JOIN 

🔸如果匿名对象在右边 可以把 LeftJoin 换成 RightJoin 变相就实现了


//单个匿名对象JOIN
//注意: 如果有OrderBy请写在MergeTable后面
db.Queryable<Order>().Select(it => new { id = it.Id })//匿名对象.MergeTable()//合并成新表 MergeTable 和 OrderItem 进行JOIN.LeftJoin<OrderItem>((x, y) => x.id == y.ItemId) //最后一个表不能是匿名对象.ToList();//技巧:如果匿名对象在右边  可以把 LeftJoin 换成 RightJoin 变相就实现了 
//多个匿名对象JOIN看下面//多个匿名对象Join 
//注意: 如果有OrderBy请写在MergeTable后面   
db.Queryable<Order>().Select(it => new { id = it.Id })//匿名对象.MergeTable()//合并 .LeftJoin<OrderItem>((x, y) => x.id == y.ItemId) //联表.Select((x, y) => new {xid=x.id,yid=y.ItemId})//在次转成匿名对象.ToList(); //老版本用法
var query1 = db.Queryable<Order, OrderItem>((o, i) => new JoinQueryInfos(JoinType.Left, o.Id == i.OrderId)).Where(o => o.Name == "jack");var query2 = db.Queryable<Custom>()//转成Object.Select<object>(it=>new { id=1});var list3=db.Queryable(query1, query2,JoinType.Left, //query2是匿名对象所以p2.id用字符串实现(p1, p2) => p1.CustomId == SqlFunc.MappingColumn(default(int),"p2.id")).Select<ViewOrder>().ToList();

3、多合一查询 🎀

一般多表查询后 动态使用搜索条件和排序 需要使用 st sc 等前缀,多表合成一后变成了单表查询 所以都不需要加别名了。

📢 注意事项:

🔸 mergetale 之前不能有排序 分页 skip take 操作,之后可以

var pageJoin = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.SchoolId==sc.Id)).Select((st,sc) => new{ id = st.Id,name = sc.Name}).MergeTable() //在mergetale之前不能有排序 分页 skip take操作,之后可以.Where(it=>it.id==1).OrderBy("name asc").ToList();
SELECT * FROM (SELECT  [st].[Id] AS [id] , [sc].[Name] AS [name]  FROM [Student] st Left JOIN [School] sc ON ( [st].[SchoolId] = [sc].[Id] )  ) MergeTable--将结果变成一个表  WHERE ( [id] = @id0 )ORDER BY name asc

4、一合一嵌套 🎀

//三种写法结果一样的//写法1:
var subQuery=db.Queryable<Order>().Select(it=>new xxx{....});
var list=db.Queryable(subQuery).ToList();//写法2:
var list=db.Queryable<Order>().SelectMergeTable(it=>new xxx{....}).ToList();//高版本可以用这个(WithTempQuery)//写法3:
var list=db.Queryable<Order>().Select(it=>new xxx{....}).MergeTable().ToList();//也可以分开写

Sql代码如下:


SELECT t.* FROM  (SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] ) t

5、跨库特殊情况 🎀

 QueryableAttr 


db.QuryableWithAttr<T>().LeftJoin<T2>(...).ToList();//切换成库不会改主表名 (leftJoin部分一样的)

 AsWithAttr()  

db.Quryable<T>().AsWithAttr().LeftJoin<T2>(...).ToList();//不是当前库改表名不切换库  (leftJoin部分一样的)

下面一些特别用例要改  AsWithAttr 


var q1=db.Queryable<UnitNClobTest>().AsWithAttr(); 
var q2=db.Queryable<UnitNClobTest>().AsWithAttr(); 
//如果用QuryableWithAttr他们如果有切换库操作 表名也不会变,所以要用AsWithAttr强势变表名
db.UnionAll(q1, q2).ToList();

 

💦万丈高楼平地起,做开发想要技术精进,必须要有扎实的基础功底。基础SQL查询语法一定要牢记于心,才能应对后面更为复杂的形势。

  .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列
  10. 【排序用法】.NET开源 ORM 框架 SqlSugar 系列
  11. 【分组去重】.NET开源 ORM 框架 SqlSugar 系列
  12. 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  13. 【导航查询】.NET开源 ORM 框架 SqlSugar 系列
  14. 【子查询】.NET开源 ORM 框架 SqlSugar 系列
  15. 【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
  16. 【配置查询】.NET开源 ORM 框架 SqlSugar 系列
  17. 【并集查询】.NET开源 ORM 框架 SqlSugar 系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484761.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】格式化输出详解:掌握 cout 的进阶用法

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;格式化输出的理论概述&#x1f4af;控制输出宽度和填充字符setw 操作符setfill 操作符 &#x1f4af;控制浮点数的显示格式fixed 与 scientificsetprecision &#x1f4af;…

【C++指南】C++内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、C 内存管理概述 二、C内存区域划分 三、C 内存管理方式 &#x1f343;1.自动内存管理…

MacOS安装软件后无法启动报错:“已损坏,无法打开,你应该将它移到废纸篓“

目录 报错截图 解决方法 知识科普 报错截图 解决方法 1. 打开系统设置->安全性与隐私->选择任何来源 2. 如果打开没有看到"任何来源"&#xff0c;如果不开启“任何来源”的选项&#xff0c;会直接影响到无法运行的第三方应用。开启“任何来源”的方法如下&a…

摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/12/04

Learning Roadmap&#xff1a; Section 1: Intro to Parallel Programming & MUSA Deep Learning Ecosystem&#xff08;摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/11/30-CSDN博客&#xff09;UbuntuDriverToolkitcondapytorchtorch_musa环境安装(2024/11/24-Ubunt…

入门网络安全工程师要学习哪些内容(详细教程)

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火&#xff0c;这个行业因为国家政策趋势正在大力发展&#xff0c;大有可为!但很多人对网络安全工程师还是不了解&#xff0c;不知道网…

JAVA |日常开发中JSTL标签库详解

JAVA &#xff5c;日常开发中JSTL标签库详解 前言一、JSTL 概述1.1 定义1.2 优势 二、JSTL 核心标签库2.1 导入 JSTL 库2.2 <c:out>标签 - 输出数据2.3 <c:if>标签 - 条件判断2.4 <c:choose>、<c:when>和<c:otherwise>标签 - 多条件选择 结束语优…

【开源】A063—基于Spring Boot的农产品直卖平台的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…

Java版-速通数据结构-树基础知识

现在面试问mysql,红黑树好像都是必备问题了。动不动就让手写红黑树或者简单介绍下红黑树。然而&#xff0c;我们如果直接去看红黑树&#xff0c;可能会一下子蒙了。在看红黑树之前&#xff0c;需要先了解下树的基础知识&#xff0c;从简单到复杂&#xff0c;看看红黑树是在什么…

C++《set与map》

在之前我们已经学习了解了CSTL当中的string和vector等容器&#xff0c;现在我们已经懂得了这些容器提供的接口该如何使用&#xff0c;并且了解了这些容器的底层结构。接下来我们在本篇当中将继续学习STL内的容器set与map&#xff0c;在此这两个容器与我们之前学习的容器提供的成…

Scala—Slice(提取子序列)方法详解

Scala—Slice&#xff08;提取子序列&#xff09;方法详解 在 Scala 中&#xff0c;slice 方法用于从集合中提取一个连续的子序列&#xff08;切片&#xff09;。可以应用于多种集合类型&#xff0c;如 List、Array、Seq 等。 一、slice 方法的定义 slice 根据提供的起始索引…

Android显示系统(05)- OpenGL ES - Shader绘制三角形(使用glsl文件)

一、前言&#xff1a; 上一篇文章我们使用了Shader绘制了一个基本的三角形&#xff0c;但是&#xff0c;发现那样写Shader程序特别麻烦&#xff0c;各种加双引号&#xff0c;还没有语法高亮提示。因为glsl也和java、c一样是一门语言&#xff0c;实际工程项目都是单独的glsl文件…

挑战用React封装100个组件【009】

Hello&#xff0c;大家好&#xff0c;今天我挑战的组件是这样的&#xff01; 欢迎大家把项目拉下来使用哦&#xff01; 项目地址&#xff1a; https://github.com/hismeyy/react-component-100 今天还是用到了react-icons。这里就不过多介绍啦&#xff0c;大家可以在前面的挑战…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏&#xff08;Data Masking&#xff09;&#xff0c;屏蔽敏感数据&#xff0c;对某些敏感信息&#xff08;比如patient_name、ip_no、ad、no、icd11、drug等等 &#xff09;通过脱敏规则进行数据的变形&#xff0c;实现隐私数据的可靠保护。电子病历作为医疗领…

React性能优化

三个可以优化的地方 避免过度多次渲染 组件会在以下情况下重新渲染 注意&#xff1a;例如组件组合的形式&#xff0c;<Test><Counter></Counter></Test>,即使Test发生了重新渲染&#xff0c;Counter也不会重新渲染。另外使用React这样的库或框架时&a…

部署项目报错

vue2项目部署后 Error: Cannot find module /views/*** 1.起因 登录页、首页等静态页面可以正常进入&#xff0c;后端访问也正常&#xff0c;可以获取到验证码。 但是登录之后会发现首页空白或者进入不到首页 F12查看有报错信息&#xff1a;Error: Cannot find module ‘/v…

高端空气净化器airgle—甲醛克星 | 双十二选购指南

随着双十二购物节的临近&#xff0c;许多消费者开始关注高端空气净化器的选购。甲醛作为室内空气污染的主要元凶之一&#xff0c;选择一款高效的空气净化器显得尤为重要。本文将详细介绍Airgle高端空气净化器的技术优势及其在除甲醛方面的卓越表现。 甲醛对健康的影响 甲醛超标…

LCR 023. 相交链表

一.题目&#xff1a; LCR 023. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 二.我的原始解法-无&#xff1a; 三.其他人的正确及好的解法&#xff0c;力扣解法参考&#xff1a; 哈希表法及双指针法&#xff1a;LCR 023. 相交链表 - 力扣&#xff08;LeetCode&#xff0…

RocketMq详解:六、RocketMq的负载均衡机制

上一章&#xff1a;《SpringBootAop实现RocketMq的幂等》 文章目录 1.背景1.1 什么是负载均衡1.2 负载均衡的意义 2.RocketMQ消息消费2.1 消息的流转过程2.2 Consumer消费消息的流程 3.RocketMq的负载均衡策略3.1 Broker负载均衡3.2 Producer发送消息负载均衡3.3 消费端的负载均…

02-开发环境搭建

02-开发环境搭建 鸿蒙开发环境的准备主要分为以下环节&#xff1a; 注册开发者实名认证创建应用下载安装开发工具新建工程 注册开发者 在华为开发者联盟网站上&#xff0c;注册成为开发者&#xff0c;并完成实名认证。 打开华为开发者联盟官网&#xff0c;点击“注册”进入…

使用SQLark分析达梦慢SQL执行计划的一次实践

最近刚参加完达梦的 DCP 培训与考试&#xff0c;正好业务系统有个 sql 查询较慢&#xff0c;就想着练练手。 在深入了解达梦的过程中&#xff0c;发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…