c# sqlsugar 主子表明细 查询
在使用 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 方便地处理主子表查询,并获取包含子表明细的主表数据了。