使用指南
开始使用

开始使用

探索 LinqSharp

探索 LinqSharp 前提是能够清楚地了解它所生成的 SQL 语句。


表达式树

表达式树 使 C# 成为了真正强大的语言。

我们可以通过 LINQ API 轻松地将 Lambda 转换为 表达式树,同时 ORM 允许我们将 表达式树 转换为我们想要的任何形式。

大多数语言不提供 Lambda 到表达式树的编译时转换,这也是 .NET ORM 可以设计得非常易于使用的原因之一。

值得指出的是,具化泛型支持也是不可或缺的,它能让表达式树具有更好的扩展性。


输出 SQL

如果您没有可用的测试用数据库,不妨试试 Northwnd

通过这个简单的销售网络数据库,我们将向您介绍如何使用 LinqSharp

  1. 创建 控制台应用程序( .NET 7 ).

  2. 执行以下命令安装 Northwnd:

    dotnet add package Microsoft.EntityFrameworkCore --version 7.0.0
    dotnet add package Microsoft.EntityFrameworkCore.Design --version 7.0.0
    dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 7.0.0
    dotnet add package LinqSharp --version 7.0
    dotnet add package Northwnd --version 7.0
    dotnet add package Ink --version 0.12.1
  3. 随后,您需要添加 NorthwndFactory.cs 文件到工程根目录:

    NorthwndFactory.cs
    public class NorthwndFactory : IDesignTimeDbContextFactory<NorthwndContext>
    {
        private static readonly string _connectionString = "Data Source=northwnd.db";
     
        public NorthwndContext CreateDbContext(params string[] args)
        {
            var assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
            var options = new DbContextOptionsBuilder()
                .UseSqlite(_connectionString, x => x.MigrationsAssembly(assemblyName))
                .Options;
            return new NorthwndContext(options);
        }
    }
  4. 打开终端,执行以下脚本来生成迁移,并应用到数据库:

    dotnet ef migrations add InitNorthwnd
  5. 编辑 Program.cs

    Program.cs
    static void Main(string[] args)
    {
        var factory = new NorthwndFactory();
        using var context = factory.CreateDbContext();
     
        if (!context.Database.GetAppliedMigrations().Any())
        {
            context.Database.Migrate();
            context.InitializeNorthwnd(new NorthwndMemoryContext());
        }
     
        var query = (
            from c in context.Categories
            select new
            {
                c.CategoryID,
                c.CategoryName,
            }
        );
        var sql = query.ToQueryString();
     
        Echo.Line(sql)
            .Table(query);
    }
  6. 编译后运行应用程序,如果一切正常,您将得到如下结果:

    SELECT "c"."CategoryID", "c"."CategoryName"
    FROM "Categories" AS "c"
    +------------+----------------+
    | CategoryID | CategoryName   |
    +------------+----------------+
    | 1          | Beverages      |
    | 2          | Condiments     |
    | 3          | Confections    |
    | 4          | Dairy Products |
    | 5          | Grains/Cereals |
    | 6          | Meat/Poultry   |
    | 7          | Produce        |
    | 8          | Seafood        |
    +------------+----------------+