首页 > 数据库 >SqlKata - 方便好用的 Sql query builder

SqlKata - 方便好用的 Sql query builder

时间:2022-10-05 22:57:06浏览次数:86  
标签:builder db SqlKata Books books Sql var Query

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

标签:builder,db,SqlKata,Books,books,Sql,var,Query
From: https://www.cnblogs.com/shanyou/p/16756669.html

相关文章

  • SQL 子查询怎么优化?写的很深的这种!
    这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战子查询 (Subquery)的优化一直以来都是SQL查询优化中的难点之一。关联子查询的基本执行方式类似于Ne......
  • new project 前后端开发总结(net6+vue+mysql+redis+mq+mongodb+ES+docker)
    newproject前后端开发总结1.开发工具:vscode,vs2022,sqlserver2.前端:vue3,vite,typescript,scss,elementplus,router,asiox,vuex3.后端:.net6,automapper,autoface,sqlsu......
  • 【教奶奶学SQL】(task6)秋招秘籍A(leetcode刷题)
    学习总结(1)敲黑板:练习第六题再看看,还欠最后1题困难题。(2)​​​猴子题解电子书​​文章目录​​学习总结​​​​练习一:各部门工资最高的员工(leetcode184难度:中等)​​​​......
  • 【教奶奶学SQL】(task6)秋招秘籍B
    学习总结文章目录​​学习总结​​​​练习一:行转列​​​​练习二:列转行​​​​练习三:带货主播​​​​练习四:MySQL中如何查看sql语句的执行计划?可以看到哪些信息?​​​......
  • 牛客网-SQL专项训练25
    ①批处理是指包含一条或多条T-SQL语句的语句组,下列选项中,关于批处理的规则描述正确的是(B) 解析:A选项:不能定义一个check约束后,立即在同一个批处理中使用;C选项:Createdef......
  • CentOS 7 下安装 MySQL 8.x
    CentOS7下安装MySQL8.x作者:Grey原文地址:博客园:CentOS7下安装MySQL8.xCSDN:CentOS7下安装MySQL8.x环境CentOS版本:CentOS7下载地址:CentOS7安装方法见:L......
  • MySQL数据库的各种安装方式【Windows,Linux,Docker】一次都告诉你
      MySQL数据库是作为程序员来说必备的一个组件,而安装相对来说又是非常繁琐的,所以本文就给大家整理下MySQL的各种安装操作。官网下载地址:​​https://dev.mysql.com/downlo......
  • MYSQL学习笔记
    学习笔记目录如下: ​​​*.sql文件的导入与介绍​​(一)   ​​MYSQL学习笔记之<基本概念>​​(二)   ​​MYSQL学习笔记之<单标查询>​​(三)    ​​MYS......
  • (六)MySQL中查询null值的一般做法
    我们之前说过,null值在MySQL中是一种很特殊的情况,处理不好会影响查询数据库的速度。那么如果我们想查询表中值为null的数据,应该怎么处理呢? 当提供的查询条件字段为NULL时,My......
  • MySQL8.0.30安装教程
    第一步:输入MySQL网站       www.mysql.com  选择DOWNLOADS并点击进入:  选择最下面的“MySQL Community(GPL)Downloads>>”选项,进入下一页......