目录

此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper
支持.net framework4.6.1及以上

支持.net core2.0及以上

1.同时使用LINQ和SQL进行查询

Connection为连接对象,详情请见 [LINQ2Dapper]最完整Dapper To Linq框架(一)

为了给予用户更多选择,可以使用LINQ和sql一起进行查询,来实现一些较为复杂的逻辑

例如

Connection.QuerySet<users>()
.Where<users>(x => x.roleId > 0 && x.roleId < 10)
.Where("users.code=@code", new { code = "3" })
.ToList();

Where<users>(x => x.roleId > 0 && x.roleId < 10)为linq部分,Where("code=@code", new { code = "3" })为sql部分,

最终会拼接成

SELECT * FROM users WHERE roleId>0 AND roleId<10 AND code=3

  

2.复杂的SQL也可支持

Connection.QuerySet<users>()
.Where($@"roleId in(select roleId from role_Power where createDate<@createDate)",
new
{
createDate = DateTime.Now
}).Where(x => x.code != "3")
.ToList();  

这是一个子查询条件的拼接

3.连表也支持SQL

默认SQL连表不会查询连表的字段

var users = Connection.QuerySet<users>()
.Join("LEFT JOIN project_Role ON users.roleId=project_Role.id")
.Get<dynamic>();

如果想获取连表的字段需要指明实体类

var users = Connection.QuerySet<users>()
.Join<project_Role>("LEFT JOIN project_Role ON users.roleId=project_Role.id")
.Get<dynamic>();

4.连表时注意

Connection.QuerySet<users>()
.Join<users, project_Role>(x => x.roleId, y => y.id)
.Where("project_Role.Id>@Id", new { Id = 1 })
.ToList();

连表时需要加上表前缀,以免字段重名冲突

例如project_Role.Id ,project_Role为表名

完整Demo可以去Github上下载:

https://github.com/a935368322/Kogel.Dapper.Test

如有问题也可以加QQ群讨论:

技术群 710217654

框架开源,可以加群下载源码

[LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用的更多相关文章

  1. [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  2. [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...

  3. [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  4. [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射

    此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本 目录 [LINQ2Dapper ...

  5. [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...

  6. [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  7. [LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  8. Linq学习<四> linq to XML

    LINQ to XML并不打算替代标准的XML API,例如,XML DOM(Document Object Model).Path.XQuery和XSLT等.如果熟悉这些API或当前需要使用或学习它 ...

  9. EntityFramework、Dapper vs 草根框架性能

    EntityFramework.Dapper vs 草根框架性能 扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 Entit ...

随机推荐

  1. 原生js动态创建、获取、删除属性的几种方式

    1.创建属性 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  2. TCP三次握手、四次握手

    前言 TCP用于应用程序之间的通信.当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求.这个请求必须被送到一个确切的地址.在双方“握手”之后,TCP将在两个应用程序之间建立一个全双工 ...

  3. CyclicBarrier 是如何做到等待多线程到达一起执行的?

    我们有些场景,是需要使用 多线各一起执行某些操作的,比如进行并发测试,比如进行多线程数据汇总. 自然,我们可以使用 CountDownLatch, CyclicBarrier, 以及多个 Thread ...

  4. hibernate之小白一

    关于hibernate框架,以下是我自己的见解,每个人的理解各不同,希望各位读者根据自己的需要来查询自己想要的.以下我来给你们分享我学习hibernate的一些理论和实践: 首先我们来了解一下hibe ...

  5. Jenkins介绍

    持续集成: 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证 ...

  6. OpenCV支持Qt用户界面

    在运行opencv程序的时候报下面的错误: ... The library is compiled without QT support in function ... 原因是在使用cmake安装op ...

  7. LSTM神经网络走读

      0设计概述 RNN梯度爆炸和消失比较严重,RNN隐层只有一个状态h记录短期记忆,增加一个长期记忆状态c似乎就可以解决问题.

  8. Unix 线程共享创建进程打开的文件资源(1)

    执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 ...

  9. Jenkinsfile与Json的转换

    前段时间调研了下青云的kubesphere,意外的发现了一个插件,pipeline-model-definition-plugin,用了将jenkins的pipeline.json互相转换的,以前可能 ...

  10. python学习-异常处理之捕获异常与抛出异常(七)

    捕获异常 python完整的异常处理语法结构如下: 特别说明: 1.try块是必需的,except块和finally,当try块没有出现异常时,程序会执行else块 2.try块后只有一个except ...