SqlKata查询生成器是一个用C# 编写的功能强大的Sql查询生成器。它是安全的,与框架无关。灵感来源于可用的顶级查询生成器,如Laravel Query Builder和 Knex

SqlKata有一个富有表现力的API。它遵循一个干净的命名约定,这与SQL语法非常相似。

通过在受支持的数据库引擎上提供一个抽象级别,允许您使用相同的统一API处理多个数据库,并且可搭配 dapper 使用,可以有效替代数据库的存储过程。

SqlKata支持复杂的查询,例如嵌套条件、从子查询中选择、过滤子查询、条件语句等。目前它有built-in编译器,用于SqlServer、MySql、PostgreSql、Oracle 和Firebird等。

扩展项目https://github.com/fairking/FluentSqlKata 可以轻松地与EntityFramework Core 6 一起使用,而无需进行大量代码更改.

完整的文档在https://sqlkata.com上查看。

安装

使用dotnet cli

$ dotnet add package SqlKata

使用Nuget包管理器

PM> Install-Package SqlKata

Quick Examples

Setup Connection
var connection = new SqlConnection("...");
var compiler = new SqlCompiler(); var db = new QueryFactory(connection, compiler)
检索所有记录
var books = db.Query("Books").Get();
仅检索已出版的图书
var books = db.Query("Books").WhereTrue("IsPublished").Get();
取回一本书
var introToSql = db.Query("Books").Where("Id", 145).Where("Lang", "en").First();
检索最近的书籍:最近10本
var recent = db.Query("Books").OrderByDesc("PublishedAt").Limit(10).Get();
包括作者信息
var books = db.Query("Books")
.Include(db.Query("Authors")) // Assumes that the Books table have a `AuthorId` column
.Get();

这将包括每个“书”上的“作者”属性

[{
"Id": 1,
"PublishedAt": "2019-01-01",
"AuthorId": 2
"Author": { // <-- included property
"Id": 2,
"...": ""
}
}]
加入作者表
var books = db.Query("Books")
.Join("Authors", "Authors.Id", "Books.AuthorId")
.Select("Books.*", "Authors.Name as AuthorName")
.Get(); foreach(var book in books)
{
Console.WriteLine($"{book.Title}: {book.AuthorName}");
}
条件查询
var isFriday = DateTime.Today.DayOfWeek == DayOfWeek.Friday;

var books = db.Query("Books")
.When(isFriday, q => q.WhereIn("Category", new [] {"OpenSource", "MachineLearning"}))
.Get();

分页
var page1 = db.Query("Books").Paginate(10);

foreach(var book in page1.List)
{
Console.WriteLine(book.Name);
} ... var page2 = page1.Next();
新增
int affected = db.Query("Users").Insert(new {
Name = "Jane",
CountryId = 1
});
更新
int affected = db.Query("Users").Where("Id", 1).Update(new {
Name = "Jane",
CountryId = 1
});
删除
int affected = db.Query("Users").Where("Id", 1).Delete();

SqlKata - 方便好用的 Sql query builder的更多相关文章

  1. Yii2 三层设计模式:SQL Command、Query builder、Active Record(ORM)

    用Yii2也有一段时间了,发现Yii2 Framework对Database的操作有非常良好的结构和弹性. 接下来介绍三种数据库操作方式. SQL Command Level: // Get DB c ...

  2. Yii的学习(3)--查询生成器 (Query Builder)

    原文地址:http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder 不过原文是英文的,Yii的官网没有翻译这一章,自己就尝 ...

  3. [moka同学笔记]Yii2 数据操作Query Builder 2

    Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...

  4. [moka同学笔记]Yii2 数据操作Query Builder

    Query Builder [php] view plain copy   $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name ...

  5. Yii Query Builder insert()、update()、delete()使用

    Yii自带的query builder还是很好用的,省去了拼sql的过程,今天在写一个语句的时候遇到这样一个问题 $connection = Yii::app()->db; $command = ...

  6. yii Query Builder (yii 查询构造器) 官方指南翻译

    /**** Query Builder translated by php攻城师 http://blog.csdn.net/phpgcs Preparing Query Builder 准备 Quer ...

  7. [Laravel] 03 - DB facade, Query builder & Eloquent ORM

    连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...

  8. Yii2 数据操作Query Builder查询数据

    Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...

  9. Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by

    案例 案例:Laravel 在文章列表中附带上前10条评论?,在获取文章列表时同时把每个文章的前10条评论一同查询出来. 这是典型分区查询案例,需要根据 comments 表中的 post_id 字段 ...

随机推荐

  1. 剑指offer——day-1

    今天开始记录一下剑指offer的题目训练,提升一下自己的编程能力吧 题目一: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列 ...

  2. 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广 ...

  3. reactjs中使用threejs从0到1

    搭建本地开发环境 安装nodejs 按照 Create React App 安装指南创建一个新的项目 npx create-react-app react-three-demo 删除掉新项目中 src ...

  4. Badusb 资料整理

    Badusb常用代码整理 一.小马下载执行 适用于常见可执行文件 #include <Keyboard.h> void setup() { //初始化,这里的代码只执行一次 delay(5 ...

  5. Tomcat报错:类XXXServlet不是Servlet 解决方法

    学习servlet 结果对应网页打不开,报错 HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 类HelloServlet不是Servlet ... 根本原因. java.lang.Cl ...

  6. Win10文件、文件夹被占用解决方法

    有时删除文件/弹出移动硬盘的时候会出现文件或文件夹或磁盘被占用的情况,从而无法删除文件/文件夹或安全弹出移动硬盘.这时可以在资源管理器中搜索该文件.文件夹,来找到对应的程序. 使用了以下链接中的方法, ...

  7. 3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper (状压DP,IDA*)

    状压DP: #include <iostream> #include <cstdio> #include <cstring> #include <algori ...

  8. Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...

  9. discuz怎么转wordpress,详细实操过程

    因为原来的是Discuz! X3.4论坛,目前访问不了,但里面有两个栏目是比较有用的,一个付费栏目,另一个免费栏目,放在硬盘有点可惜,于是想把它转为wordpress的两个栏目.发现网上都没有详细过程 ...

  10. [CF1527D] MEX Tree (lca)

    题面 给你一棵 n n n 个结点的树,对于所有的 k ∈ [ 0 , n ] k\in[0,n] k∈[0,n] ,求出 M E X = k {\rm MEX}=k MEX=k 的路径数量. 一条路 ...