当前位置: 首页 > news >正文

【嵌套查询】.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 系列
     

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

💥 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();

  .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 系列

相关文章:

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

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

React 前端框架1

一、React 简介 &#xff08;一&#xff09;什么是 React React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开源并维护。它采用了组件化的开发思想&#xff0c;允许开发者将复杂的 UI 拆分成一个个独立、可复用的小组件&#xff0c;就如同搭积木一般&am…...

【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)

网上很多人声称并提供的flash离线安装包是需要联网才能安装成功的&#xff0c;其实就是在线安装包&#xff0c;而这里提供的是真正的离线安装包&#xff0c;无需联网即可安装成功。 点击下面地址下载离线安装包&#xff1a; Adobe Flash Player 32.0.0.156 for IE Adobe Fla…...

数据采集时,不同地区的动态IP数据质量有什么差异?

在数据采集的广阔世界中&#xff0c;动态IP扮演着至关重要的角色。它们不仅帮助我们突破地域限制&#xff0c;还能够提供多样化的数据来源。但是&#xff0c;不同地区的动态IP在数据质量上是否存在差异呢&#xff1f;本文将探讨这一问题&#xff0c;并为您提供实用的见解。 动…...

【Python爬虫五十个小案例】爬取猫眼电影Top100

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1f40d;引言 猫眼电影是国内知名的电影票务与资讯平台&#xff0c;其中Top100榜单是影迷和电影产业观察者关注的重点。通过爬取猫眼电影Top10…...

等保测评和 ISO27001 都是信息保护,区别是什么?

ISO27001 和等级保护&#xff08;等保&#xff09;都是信息安全领域重要的标准和制度&#xff0c;但它们在多个方面存在区别&#xff1a; 定义和性质 ISO27001 它是国际标准化组织&#xff08;ISO&#xff09;发布的信息安全管理体系标准&#xff0c;其目的是帮助组织建立、实…...

Linux系统编程之进程创建

概述 在Linux系统中&#xff0c;通过创建新的进程&#xff0c;我们可以实现多任务处理、并发执行和资源隔离等功能。创建进程的主要方法为&#xff1a;fork、vfork、clone。下面&#xff0c;我们将分别进行介绍。 fork fork是最常用的创建新进程的方法。当一个进程调用fork时&a…...

JAVA-IO

目录 IO流 一 字节流 1 FileOutStream 1 书写&#xff1a; 2 换行书写与续写&#xff1a; 2 FileInputStream 1 读取数据 2 循环读取&#xff1a; 二 字符流 1 FileReader 1 空参的read()方法读取数据&#xff1a; 2 有参的read()方法读取数据&#xff1a; 3 指定字…...

动态系统特征分析:特征向量、特征值、频率与阻尼比、参与因子计算方法

特征值和特征向量在动态系统分析中是核心工具&#xff0c;广泛用于电力系统小信号稳定性、机械系统模态分析等领域。以下详细介绍计算方法及应用。 1. 求解特征值与特征向量 对于一个 n n n\times n nn的系统矩阵 A A A&#xff1a; 右特征向量与特征值 特征值( λ \lambd…...

乐鑫发布 esp-iot-solution v2.0 版本

今天&#xff0c;乐鑫很高兴地宣布&#xff0c;esp-iot-solution v2.0 版本已经发布&#xff0c;release/v2.0 分支下的正式版本组件将为用户提供为期两年的 Bugfix 维护&#xff08;直到 2027.01.25 ESP-IDF v5.3 EOL&#xff09;。该版本将物联网开发中常用的功能进行了分类整…...

动态代理如何加强安全性

在当今这个信息爆炸、网络无孔不入的时代&#xff0c;我们的每一次点击、每一次浏览都可能留下痕迹&#xff0c;成为潜在的安全隐患。如何在享受网络便利的同时&#xff0c;有效保护自己的隐私和信息安全&#xff0c;成为了每位网络使用者必须面对的重要课题。动态代理服务器&a…...

Flutter 之 InheritedWidget

InheritedWidget 是 Flutter 框架中的一个重要类&#xff0c;用于在 Widget 树中共享数据。它是 Flutter 中数据传递和状态管理的基础之一。通过 InheritedWidget&#xff0c;你可以让子 Widget 在不需要显式传递数据的情况下&#xff0c;访问祖先 Widget 中的数据。这种机制对…...

AI 助力开发新篇章:云开发 Copilot 深度体验与技术解析

本文 一、引言&#xff1a;技术浪潮中的个人视角1.1 AI 和低代码的崛起1.2 为什么选择云开发 Copilot&#xff1f; 二、云开发 Copilot 的核心功能解析2.1 自然语言驱动的低代码开发2.1.1 自然语言输入示例2.1.2 代码生成的模块化支持 2.2 实时预览与调整2.2.1 实时预览窗口功能…...

MyBatis-Plus介绍及基本使用

文章目录 概述介绍MyBatis-Plus 常用配置分页插件配置类注解配置 快速入门maven 依赖编写配置文件编写启动类编写 MybatisPlus 配置类 代码生成器&#xff1a;MybatisPlusGeneratormaven依赖代码生成器核心类 概述 介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 M…...

SpringBoot 整合 Avro 与 Kafka

优质博文&#xff1a;IT-BLOG-CN 【需求】&#xff1a;生产者发送数据至 kafka 序列化使用 Avro&#xff0c;消费者通过 Avro 进行反序列化&#xff0c;并将数据通过 MyBatisPlus 存入数据库。 一、环境介绍 【1】Apache Avro 1.8&#xff1b;【2】Spring Kafka 1.2&#xf…...

支持JT1078和GB28181的流媒体服务器-LKM启动配置文件参数说明

流媒体服务器地址&#xff1a;https://github.com/lkmio/lkm GB28181信令&#xff0c;模拟多个国标设备工具&#xff1a;https://github.com/lkmio/gb-cms 文章目录 gop_cachegop_buffer_sizeprobe_timeoutwrite_timeoutmw_latencylisten_ippublic_ipidle_timeoutreceive_timeo…...

什么是隐式类型转换?隐式类型转换可能带来哪些问题? 显式类型转换(如强制类型转换)有哪些风险?

C 中的隐式类型转换 定义&#xff1a;在 C 中&#xff0c;隐式类型转换是指由编译器自动执行的类型转换&#xff0c;不需要程序员显式地进行操作。这种转换在很多情况下会自动发生&#xff0c;比如在表达式求值、函数调用传参等过程中。常见场景 算术运算中的转换&#xff1a;…...

量化交易新利器:阿布量化(AbuQuant)——金融研究者的得力助手

&#x1f680; 量化交易新利器&#xff1a;阿布量化&#xff08;AbuQuant&#xff09;——金融研究者的得力助手 &#x1f680; 文章目录 &#x1f680; 量化交易新利器&#xff1a;阿布量化&#xff08;AbuQuant&#xff09;——金融研究者的得力助手 &#x1f680;&#x1f3…...

UI设计从入门到进阶,全能实战课

课程内容&#xff1a; ├── 【宣导片】从入门到进阶!你的第一门UI必修课!.mp4 ├── 第0课&#xff1a;UI知识体系梳理 学习路径.mp4 ├── 第1课&#xff1a;IOS设计规范——基础规范与切图.mp4 ├── 第2课&#xff1a;IOS新趋势解析——模块规范与设计原则(上).mp4…...

Uniapp自动调整元素高度

获取设备的像素 如果你想让元素的高度相对于整个屏幕的高度占用一定的比例&#xff0c;可以通过获取屏幕的高度&#xff0c;然后计算出你想要的比例来设置元素的高度。以下是如何实现的示例&#xff1a; <script setup> import { ref, onMounted } from vue;// 定义一个…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

路由基础-路由表

本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中&#xff0c;往往存在多个不同的IP网段&#xff0c;数据在不同的IP网段之间交互是需要借助三层设备的&#xff0c;这些设备具备路由能力&#xff0c;能够实现数据的跨网段转发。 路由是数据通信网络中最基…...

13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析

LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...