自研ORM 完美支持 Exists查询 非常灵活
示例代码
Case 1 Code
                var data = db.Query<Product>()
                    .Where(w => db.Query<Product>().WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1).Any())
                    .Select(s => new
                    {
                        s.ProductId,
                        s.ProductCode
                    }).ToList();
Case 1 Sql
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE  EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p2`.`ProductId` = 1 ) )
Case 2 Code (如需主表作为条件 需使用Case1 写法)
                var existsQuery = db.Query<Product>().WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1);
                var data = db.Query<Product>()
                    .Where(w => existsQuery.Any())
                    .Select(s => new
                    {
                        s.ProductId,
                        s.ProductCode
                    }).ToList();
Case 2 Sql
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE  EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p2`.`ProductId` = 1 ) )
Case 3 Code(真实项目写法的伪代码,可自由搭配,基本上可以媲美手写sql)
                var queryBuilder = db.Query<Product>()
                    .Where(a => SqlFunc.Operation(a.CreateTime.ToString("yyyy-MM-dd"), ">=", DateTime.Now.ToString("yyyy-MM-dd")))
                    .Where(a => db.Query<Product>().Where(b => a.ProductName.Contains("主表") || b.Custom1.Contains("子表")).WhereIF(!string.IsNullOrWhiteSpace("测试"), a => a.ProductId == 1).Select(s => 1).Any())
                    .Select(s => new
                    {
                        s.ProductId,
                        s.ProductCode
                    }).QueryBuilder;
Case 3 Print Result
SELECT `p1`.`ProductId` AS `ProductId`,`p1`.`ProductCode` AS `ProductCode` FROM `Product` `p1`
WHERE DATE_FORMAT( `p1`.`CreateTime`,'%Y-%m-%d' ) >= DATE_FORMAT( @Now_1,'%Y-%m-%d' ) AND  EXISTS ( SELECT 1 FROM `Product` `p2`
WHERE ( `p1`.`ProductName` LIKE CONCAT( '%','主表','%' ) OR `p2`.`Custom1` LIKE CONCAT( '%','子表','%' ) ) AND ( `p2`.`ProductId` = 1 ) )
参数名称:Now_1 参数值:2023-06-07 18:35:14
3.亮点功能
1.别名自动编排和联表查询一样
2.支持Query 所有非返回结果集方法,结尾需调用Any方法以及重载方法,非常灵活 !!!
开源项目地址:https://github.com/China-Mr-zhong/Fast-Framework (唯一)
其它查询示例
Select查询 (Case When)
var data = db.Query<Product>().Select(s => new
{
CaseTest1 = SqlFunc.Case(s.Custom1).When("1").Then("xx1").When("2").Then("xx2").Else("xx3").End(),
CaseTest2 = SqlFunc.CaseWhen<string>(s.Custom1 == "1").Then("xx1").When(s.Custom1 == "2").Then("xx2").Else("xx3").End()
}).ToList();
分组查询
var data = db.Query<Product>().GroupBy(s => new
{
s.ProductId,
s.ProductName
}).ToList();
分组聚合查询
var sql = db.Query<Order>().InnerJoin<OrderDetail>((a, b) => a.OrderId == b.OrderId).GroupBy((a, b) => new
{
a.OrderCode
}).Select((a, b) => new
{
a.OrderCode,
Sum_Qty = SqlFunc.Sum(b.Qty)//支持嵌套
}).ToList();
排序查询
var data = db.Query<Product>().OrderBy(s => new
{
s.CreateTime
}).ToList();
//这是多个字段排序使用方法 还有其它重载方法
Having查询
var data = db.Query<Product>().GroupBy(s => new
{
s.ProductId,
s.ProductName
}).Having(s => SqlFunc.Count(s.ProductId) > 1).ToList();
//必须先使用GroupBy方法 懂得都懂
自研ORM 完美支持 Exists查询 非常灵活的更多相关文章
- 自研ORM框架 实现类似EF Core Include 拆分查询 支持自定义条件、排序、选择
		
Baozi, I'm Mr.Zhong I like to brush TikTok, I know that anchors like to call it that, haha!Recently, ...
 - 数据库开发-Django ORM的单表查询
		
数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...
 - SqlSugar ORM已经支持读写分离
		
目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...
 - 数据库:django ORM如何处理N+1查询
		
数据库N+1查询是个常见的问题,简单描述场景如下 基本场景 class Category(models.Model): name = models.CharField(max_length=30) c ...
 - 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述
		
8.1 概述 8.1.1 ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...
 - Retrofit 2.0 超能实践(一),okHttp完美支持Https传输
		
http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...
 - Retrofit 2.0 超能实践,完美支持Https传输
		
http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...
 - mysql update不支持子查询更新
		
先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...
 - Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
		
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
 - 数据库开发-Django ORM的多对多查询
		
数据库开发-Django ORM的多对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...
 
随机推荐
- 了解 BASH
			
管理整个计算机硬件的其实是操作系统的核心(kernel),这个核心是需要被保护的.所以使用者就只能通过shell来跟核心沟通,以让核心达到想要的工作.那么系统中有多少 shell?为什么要使用 bas ...
 - 【深入浅出 Yarn 架构与实现】5-3 Yarn 调度器资源抢占模型
			
本篇将对 Yarn 调度器中的资源抢占方式进行探究.分析当集群资源不足时,占用量资源少的队列,是如何从其他队列中抢夺资源的.我们将深入源码,一步步分析抢夺资源的具体逻辑. 一.简介 在资源调度器中,以 ...
 - Unity C# IEnumrator 与 async 有的区别
			
前言 IEnumerator 和 async 是在 Unity 和 C# 中处理异步编程的两种不同方法.它们各自有不同的使用场景和优缺点. IEnumerator IEnumerator 是 C# 中 ...
 - Oracle_表空间
			
Oracle 表空间 在执行具体的操作之前,由于Oracle不允许删除现有临时表空间,所以在删除现有临时表空间时要终止现有的实时会话. 查询Oracle表空间名称,表空间物理文件路径 查询临时表空间: ...
 - 【PWN】初见BROP
			
前言|与BROP的相遇 第一次BROP,它让我觉得pwn,或者说网安很妙,也很折磨 在遇到它之前,之前接触的题目都是简单的栈溢出,感觉没有啥有趣的,很简单,找gadget溢出就可以,一切都看得见 可遇 ...
 - 单元测试、文档测试、读写文件、StringIO和BytesIO
			
1.单元测试就是为了测试程序执行的正确性 2.编写单元测试时,需要编写一个单元测试类,继承unittest TestCase类 3.单元测试最常用的断言是assert,断言期望抛出指定的异常 4.运行 ...
 - python数据类型、变量以及编码和字符串、格式化
			
1.数据类型包括整型.浮点型.字符串.布尔型. 整数如果位数太多可以用_隔开,浮点数可以用科学记数法表示,字符串要用单引号或者双引号括起来,布尔型的值只能为True和False 2.变量可以由数字.字 ...
 - ES_ChatGPT问答
			
Q1:springboot项目,如何使用elasticsearch的api增删改查?查询中有哪些方式,如果模糊查询.排序查询.分页查询?分别阐述下这些查询方式的用法?最后举一个完整的例子 答: 在Sp ...
 - SpringBoot @Target、@Retention、@Documented注解简介
			
jdk1.5起开始提供了4个元注解:@Target.@Retention.@Documented.@Inherited.何谓元注解?就是注解的注解. 在程序开发中,有时候我们需要自定义一个注解,这个自 ...
 - 【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
			
简介 观察者模式(Observer Pattern)是一种行为型模式.它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 观察者模式使用三个类S ...