c# sqlsugar 主子表明细 查询

发布于:2025-07-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

在使用 SqlSugar ORM 进行数据库操作时,特别是在处理主子表关系时,通常需要执行关联查询来获取主表和其子表的数据。SqlSugar 提供了强大的查询能力,支持多种方式的关联查询,包括左连接(Left Join)、内连接(Inner Join)等。下面将介绍如何使用 SqlSugar 进行主子表的查询,并附带子表的明细。

1. 定义实体

首先,确保你的实体类正确反映了数据库表的结构。例如,假设我们有两个表:Order(订单表)和 OrderDetail(订单详情表),其中 OrderDetail 表通过 OrderId 与 Order 表关联。

[SugarTable("Order")]
public class Order
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int OrderId { get; set; }
    public string OrderName { get; set; }
    // 其他字段...
 
    [SugarColumn(IsIgnore = true)]
    public List<OrderDetail> OrderDetails { get; set; } // 这个属性用于存放子表数据
}
 
[SugarTable("OrderDetail")]
public class OrderDetail
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int DetailId { get; set; }
    public int OrderId { get; set; }
    public string ProductName { get; set; }
    // 其他字段...
}

2. 配置数据库连接

配置 SqlSugar 数据库连接。

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() 
{
    ConnectionString = "your connection string", // 数据库连接字符串
    DbType = DbType.SqlServer, // 或其他数据库类型,如 MySql, Sqlite 等
    IsAutoCloseConnection = true,
    InitKeyType = InitKeyType.Attribute
});

3. 执行关联查询

使用 SqlSugar 的 Queryable 方法进行关联查询。这里使用左连接(Left Join)来获取每个订单及其对应的订单详情。

var orders = db.Queryable<Order, OrderDetail>((o, od) => o.OrderId == od.OrderId) // 指定关联条件
               .LeftJoin<OrderDetail>((o, od) => od.OrderId == o.OrderId) // 左连接子表到主表,确保即使没有子记录也能获取主记录
               .Select((o, od) => new Order { OrderId = o.OrderId, OrderName = o.OrderName, OrderDetails = od }) // 选择字段,并将子表数据放入主表的子表属性中
               .ToList(); // 执行查询并获取结果列表

4. 处理查询结果

查询结果中的 orders 列表将包含每个订单及其对应的订单详情列表。例如:

foreach (var order in orders)
{
    Console.WriteLine($"Order ID: {order.OrderId}, Order Name: {order.OrderName}");
    foreach (var detail in order.OrderDetails)
    {
        Console.WriteLine($"  Detail ID: {detail.DetailId}, Product Name: {detail.ProductName}");
    }
}

这样,你就可以在 C# 中使用 SqlSugar ORM 方便地处理主子表查询,并获取包含子表明细的主表数据了。


网站公告

今日签到

点亮在社区的每一天
去签到