在使用 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 方便地處理主子表查詢,并獲取包含子表明細的主表數據了。