• 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();
  • 相关阅读:
    关于C51单片机程序太大如何处理
    Java 多线程(三):锁(一)
    新手学习:ArcGIS 提取SHP 路网数据、节点
    MAC手动修复『已损坏』问题 终端运行命令报错处理
    对于复杂的网页布局,如多列布局和网格布局,CSS 有哪些最佳实践和技巧?
    关系型数据库之 MySQL 详解:从入门到精通【面试圣经】
    go语言学习-异常处理
    运行时内存分配
    硕鼠——视频下载利器
    日常遇到的数据库上的常用排查命令
  • 原文地址:https://www.cnblogs.com/shanyou/p/16756669.html