SqlKata - 方便好用的 Sql query builder
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的更多相关文章
- Yii2 三层设计模式:SQL Command、Query builder、Active Record(ORM)
用Yii2也有一段时间了,发现Yii2 Framework对Database的操作有非常良好的结构和弹性. 接下来介绍三种数据库操作方式. SQL Command Level: // Get DB c ...
- Yii的学习(3)--查询生成器 (Query Builder)
原文地址:http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder 不过原文是英文的,Yii的官网没有翻译这一章,自己就尝 ...
- [moka同学笔记]Yii2 数据操作Query Builder 2
Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...
- [moka同学笔记]Yii2 数据操作Query Builder
Query Builder [php] view plain copy $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name ...
- Yii Query Builder insert()、update()、delete()使用
Yii自带的query builder还是很好用的,省去了拼sql的过程,今天在写一个语句的时候遇到这样一个问题 $connection = Yii::app()->db; $command = ...
- yii Query Builder (yii 查询构造器) 官方指南翻译
/**** Query Builder translated by php攻城师 http://blog.csdn.net/phpgcs Preparing Query Builder 准备 Quer ...
- [Laravel] 03 - DB facade, Query builder & Eloquent ORM
连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...
- Yii2 数据操作Query Builder查询数据
Query Builder $rows = (new \yii\db\Query()) ->select(['dyn_id', 'dyn_name']) ->from('zs_dynast ...
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
案例 案例:Laravel 在文章列表中附带上前10条评论?,在获取文章列表时同时把每个文章的前10条评论一同查询出来. 这是典型分区查询案例,需要根据 comments 表中的 post_id 字段 ...
随机推荐
- k8s配置集ConfigMap详解
ConfigMap介绍 ConfigMap和Secret是Kubernetes系统上两种特殊类型的存储卷,ConfigMap对象用于为容器中的应用提供配置文件等信息.但是比较敏感的数据,例如密钥.证书 ...
- raspberrypi系统在加入k8s作为node节点时遇到的问题
新买的树莓派4b到货后就迫不及待的烧录上raspberrypi系统,将新派加入我的k8s集群,期间遇到了点小挫折,好歹也一个一个解决了: 一.kubelet版本不对导致无法加入k8s集群 在执行kub ...
- 通过类名引用静态成员方法和通过super引用父类的成员方法
package com.yang.Test.StaticMethodReference; /** * 通过类型引用静态成员方法 * 类已经存在,静态成员方法也已经存在 * 就可以通过类名直接引用静态成 ...
- TCP通信的概述
- Object类的toString方法和equals方法
Object类 概述 java.long.Object 类是java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终的父类就是Object 类Object是类层 ...
- 斜率优化 dp 总结
我们以一道例题引入: 洛谷 P2365 任务安排: \(n\) 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 \(n\) 个任务被分成若干批,每批包含相邻的若干任务. 从零时刻开始,这些 ...
- Python 汽车之家 全系车型参数(包含历史停售车型) 最全
本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末 汽车之家2021 全系车型参数(包含历史停售车型) 2021.10.21更新 增加参数:电动扰流板.无框设计车门.隐藏电动门把手.自动驾驶 ...
- 一文详解 implementation api embed
最近使用 Android Studio 从事项目开发时,发现对 implementation.api.embed 的用法了解的不是很清楚,这里准备一篇文章对其使用场景或者说是使用方式进行一个总结. d ...
- Eclipse里项目名有红叉,但是项目里的每一个文件都没有红叉
原因一:导入的文件被删除了. 解决方法:右击项目名,在弹出的菜单中,选择"Bulid Path"-->"configure build path"--&g ...
- 前端监控系列1| 字节的前端监控SDK是怎样设计的
作者:彭莉,火山引擎 APM 研发工程师,2020年加入字节,负责前端监控 SDK 的开发维护.平台数据消费的探索和落地. 摘要 字节内部应用环境多样( Web 应用.小程序.Electron 应用. ...