返回
FreeSql 联表查询详解:如何轻松获取关联数据
见解分享
2023-12-23 01:31:45
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的链式查询语法,您可以轻松地构建联表查询语句,并获取所需的数据。