示例代码

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查询 非常灵活的更多相关文章

  1. 自研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, ...

  2. 数据库开发-Django ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

  3. SqlSugar ORM已经支持读写分离

    目前只有MYSQL版 3.5.2.9 支持,其库版本12月3号更新该功能 用例讲解 using (var db = new SqlSugarClient("主连接字符串", &qu ...

  4. 数据库:django ORM如何处理N+1查询

    数据库N+1查询是个常见的问题,简单描述场景如下 基本场景 class Category(models.Model): name = models.CharField(max_length=30) c ...

  5. 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述

    8.1  概述 8.1.1  ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...

  6. Retrofit 2.0 超能实践(一),okHttp完美支持Https传输

    http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...

  7. Retrofit 2.0 超能实践,完美支持Https传输

    http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...

  8. mysql update不支持子查询更新

    先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...

  9. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  10. 数据库开发-Django ORM的多对多查询

    数据库开发-Django ORM的多对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...

随机推荐

  1. Kafka 之 HW 与 LEO

    更多内容,前往 IT-BLOG HW(High Watermark):俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息.分区 ISR 集合中的每 ...

  2. CSS3新特性值逻辑选择器

    1. :is 解释::is() CSS伪类函数将选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素. 例如 对于多个不同父容器的同个子元素的一些共性样式设置,传统写法如下 header p ...

  3. vue中优雅的使用定时器

    1.常见方法.在data中声明一个变量,定时器绑定到变量中,然后在beforeDestory中销毁这个定时器 举个例子 首先我在data函数里面进行定义定时器名称 data() { return { ...

  4. JQ的尺寸类

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么

    一丶什么是程序 程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据. CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言 ...

  6. ARC149(A~E)

    Tasks - AtCoder Regular Contest 149 又是114514年前做的题,现在来写 屯了好多,清一下库存 A - Repdigit Number (atcoder.jp) 直 ...

  7. vue之条件渲染v-if

    目录 说明 语法 示例 说明 "vue条件渲染指令包括v-if.v-else.v-else-if.v-show. 语法 v-if="条件1&&条件2" # ...

  8. mysql数据库常见优化方法

    1,创建适当的索引(主键索引.唯一索引.普通索引.全文索引.空间索引). 2,对sql语句进行优化--->慢查询(explain). 3,使用分表技术(水平分表,垂直分表),分区技术. 4,读写 ...

  9. KMeans算法与GMM混合高斯聚类

    一.K-Means K-Means是GMM的特例(硬聚类,基于原型的聚类).假设多元高斯分布的协方差为0,方差相同.   K-Means算法思想 对于给定的样本集,按照样本之间的距离大小,将样本集划分 ...

  10. Mysql中的数据类型注意事项

    整型数据类型 MySQL数据类型 含义(有符号) tinyint 1字节,范围(-128~127) smallint 2字节,范围(-32768~32767) mediumint 3字节,范围(-83 ...