• SqlKata - 方便好用的 Sql query builder


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

    SqlKata有一个富有表现力的API。它遵循一个干净的命名约定,这与SQL语法非常相似。

    通过在受支持的数据库引擎上提供一个抽象级别,允许您使用相同的统一API处理多个数据库,并且可搭配 dapper 使用,可以有效替代数据库的存储过程。

    SqlKata支持复杂的查询,例如嵌套条件、从子查询中选择、过滤子查询、条件语句等。目前它有built-in编译器,用于SqlServer、MySql、PostgreSql、Oracle 、Sqlite和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();
  • 相关阅读:
    PAM从入门到精通(十七)
    安科瑞高校能源管理系统-Susie 周
    【React】基于JS 3D引擎库实现关系图(图&graph)
    正则表达式模块re
    享元模式Flyweight
    Python和Excel的完美结合:常用操作汇总
    LeetCode 125.验证回文串
    cesium 实战记录(六)地图通用工具方法的封装
    制作MySQL8绿色版&轻量版
    日志中打印统计信息的方案
  • 原文地址:https://www.cnblogs.com/shanyou/p/16756669.html