当前位置:首页 > 技术 > 正文内容

SqlKata - 方便好用的 Sql query builder

Lotus2022-10-06 18:16技术

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();

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/121.html

分享给朋友:

“SqlKata - 方便好用的 Sql query builder” 的相关文章

【存储数据恢复】某品牌EqualLogic系列存储介绍&常见故障的数据恢复方法

某品牌EqualLogic系列存储介绍: 某品牌EqualLogic系列存储可以通过连接串口先对存储进行初始化。 通过浏览器登录配置的ip地址,账号默认:grpadmin,密码默认:grpadmin;也可以通过串口登陆查看状态。 卷的划分和访问如下图: 底层结构: 以9块盘组建磁盘阵列为例,该存储在创建RAID的时候,会默认分配一块热备盘,并不是全局热备。 用8块...

#打卡不停更#[图文并茂]Packstack部署train版openstack

Packstack部署openstack-train 介绍如何在centos7.9中使用packstack部署openstack-train。 首先需要安装一个最小化安装的centos7.9,按照你的网络环境配置好网络,然后重启。 这里我的环境是VMware虚拟机,ip是192.168.10.30. 首先我们需要关闭防火墙和NetworkManager systemctl disable --n...

十分钟速成DevOps实践

摘要:以华为云软件开发平台DevCloud为例,十分钟简单体验下DevOps应用上云实践——H5经典小游戏上云。 本文分享自华为云社区《​​《DevOps实践秘籍》十分钟速成DevOps实践​​》,作者:AppCloud小助手 。 DevOps是什么? DevOps是Development和Operations的组合词,简单点理解就是研发运维一体化的方法论,目的是通过自动化“软件交付”和“架构变...

激活数据价值,探究DataOps下的数据架构及其实践丨DTVision开发治理篇

据中国信通院发布,2012 年到 2021 年 10 年间,我国数字经济规模由 12 万亿元增长到 45.5 万亿元,在整个 GDP 中的比重由 21.6% 提升至 39.8%。顺应时代发展新趋势,“数据” 成为新的生产要素已是毋庸置疑的共识。 如果说数据中台的崛起代表着企业数字化转型从流程驱动走向数据驱动,从数字化走向智能化。那么 DataOps,则是实现数据中台的一个优秀的理念或方法论。 D...

Python基础(九) | time random collections itertools标准库详解

⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深度学习的代码能力打下坚实的基础。 ????本文已收录于Python基础系列专栏: Python基础系列教程 欢迎订阅,持续更新。 Python自身提供了比较丰富的生态,拿来即用,可极大的提高开发效率 9...

将 N 叉树编码为二叉树

将 N 叉树编码为二叉树 作者:Grey 原文地址: 博客园:将 N 叉树编码为二叉树 CSDN:将 N 叉树编码为二叉树 题目描述 将一棵n叉树编码为一棵二叉树,并对二叉树进行解码,得到原始的n叉树。 n叉树是一棵有根树,其中每个节点的子树不超过n个。 类似地,二叉树是一棵有根树,其中每个节点的子树不超过2个。 编码/解码算法的工作方式不受限制。 您只需要确保一个n叉树可以被编码为一个二叉树,并...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。