前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SqlKata - 方便好用的 Sql query builder

SqlKata - 方便好用的 Sql query builder

作者头像
张善友
发布2022-10-06 14:04:10
1.2K0
发布2022-10-06 14:04:10
举报
文章被收录于专栏:张善友的专栏

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

代码语言:javascript
复制
$ dotnet add package SqlKata

使用Nuget包管理器

代码语言:javascript
复制
PM> Install-Package SqlKata
Quick Examples
Setup Connection
代码语言:javascript
复制
var connection = new SqlConnection("...");
var compiler = new SqlCompiler();

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

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

代码语言:javascript
复制
[{
    "Id": 1,
    "PublishedAt": "2019-01-01",
    "AuthorId": 2
    "Author": { // <-- included property
        "Id": 2,
        "...": ""
    }
}]
加入作者表
代码语言:javascript
复制
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}");
}
条件查询
代码语言:javascript
复制
var isFriday = DateTime.Today.DayOfWeek == DayOfWeek.Friday;

var books = db.Query("Books")
    .When(isFriday, q => q.WhereIn("Category", new [] {"OpenSource", "MachineLearning"}))
    .Get();
代码语言:javascript
复制
代码语言:javascript
复制
分页
代码语言:javascript
复制
var page1 = db.Query("Books").Paginate(10);

foreach(var book in page1.List)
{
    Console.WriteLine(book.Name);
}

...

var page2 = page1.Next();
新增
代码语言:javascript
复制
int affected = db.Query("Users").Insert(new {
    Name = "Jane",
    CountryId = 1
});
更新
代码语言:javascript
复制
int affected = db.Query("Users").Where("Id", 1).Update(new {
    Name = "Jane",
    CountryId = 1
});
删除
int affected = db.Query("Users").Where("Id", 1).Delete();
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • Quick Examples
    • Setup Connection
      • 检索所有记录
        • 仅检索已出版的图书
          • 取回一本书
            • 检索最近的书籍:最近10本
              • 包括作者信息
                • 加入作者表
                  • 条件查询
                    • 新增
                      • 更新
                        • 删除
                          • int affected = db.Query("Users").Where("Id", 1).Delete();
                          相关产品与服务
                          数据库
                          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档