SqlKata - 方便好用的 Sql query builder

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlKata - 方便好用的 Sql query builder相关的知识,希望对你有一定的参考价值。

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

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的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 和 SqlKata 查询引擎的多个 where 子句

plsql很好用的自定义设置转载

idea的sql query plugin插件怎么用

推荐一个好用的sql版本控制和美化工具SQLToolbelt

pd.read_sql字符类型

pandas-query使用