返回

FreeSql 联表查询详解:如何轻松获取关联数据

见解分享

FreeSql ORM 联表查询教程

什么是联表查询?

联表查询(Join)是SQL中一种重要的查询方式,它允许您从两个或多个表中获取数据,并根据这些表之间的关系将数据组合在一起。例如,如果我们有一个订单表和一个产品表,我们可以使用联表查询来获取每个订单中包含的产品信息。

FreeSql如何支持联表查询?

FreeSql提供了一种链式查询语法来支持联表查询,这种语法非常直观和易于使用。我们可以通过调用FreeSql查询对象的Join方法来指定要联接的表,并通过调用On方法来指定联接条件。

FreeSql联表查询示例

为了更好地理解FreeSql的联表查询功能,我们来看一个简单的示例。假设我们有一个订单表和一个产品表,表结构如下:

CREATE TABLE orders (
  id INT NOT NULL AUTO_INCREMENT,
  customer_id INT NOT NULL,
  product_id INT NOT NULL,
  quantity INT NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE products (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  price DECIMAL(10, 2) NOT NULL,
  PRIMARY KEY (id)
);

现在,我们要使用FreeSql来查询所有订单及其对应的产品信息。我们可以使用以下代码来实现:

using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;订单ID:{item.Order.Id}"
); Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;客户ID:{item.Order.CustomerId}"
); Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;产品ID:{item.Order.ProductId}"
); Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;数量:{item.Order.Quantity}"
); Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;产品名称:{item.Product.Name}"
); Console.WriteLine(
using FreeSql. ORM. MySql;

namespace FreeSqlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建FreeSql ORM实例
            var fsql = new FreeSqlBuilder()
                .UseMySql("Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=test;")
                .Build();

            // 执行联表查询
            var result = fsql.Select<Order, Product>()
                .LeftJoin((o, p) => o.ProductId == p.Id)
                .ToList();

            // 输出查询结果
            foreach (var item in result)
            {
                Console.WriteLine($"订单ID:{item.Order.Id}");
                Console.WriteLine($"客户ID:{item.Order.CustomerId}");
                Console.WriteLine($"产品ID:{item.Order.ProductId}");
                Console.WriteLine($"数量:{item.Order.Quantity}");
                Console.WriteLine($"产品名称:{item.Product.Name}");
                Console.WriteLine($"产品价格:{item.Product.Price}");
                Console.WriteLine("------------------------------------");
            }
        }
    }

    public class Order
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
quot;产品价格:{item.Product.Price}"
); Console.WriteLine("------------------------------------"); } } } public class Order { public int Id { get; set; } public int CustomerId { get; set; } public int ProductId { get; set; } public int Quantity { get; set; } } public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } }

运行上面的代码,将会输出所有订单及其对应的产品信息。

FreeSql联表查询的优势

FreeSql的联表查询功能具有以下几个优势:

  • 语法简单,易于使用
  • 支持多种联接类型,包括内联接、外联接、左外联接和右外联接
  • 支持多种联接条件,包括等值连接、不等值连接、大于连接、小于连接、大于等于连接和小于等于连接
  • 支持嵌套联接,可以实现复杂的数据查询

总结

FreeSql的联表查询功能非常强大,可以帮助您轻松获取关联数据。通过使用FreeSql的链式查询语法,您可以轻松地构建联表查询语句,并获取所需的数据。