当前位置: 首页 > news >正文

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


文章转载自:
http://carving.kjawz.cn
http://alai.kjawz.cn
http://antiquate.kjawz.cn
http://backfielder.kjawz.cn
http://biyearly.kjawz.cn
http://bergson.kjawz.cn
http://abalone.kjawz.cn
http://chitinous.kjawz.cn
http://awareness.kjawz.cn
http://autogyro.kjawz.cn
http://cashoo.kjawz.cn
http://atacamite.kjawz.cn
http://bagwoman.kjawz.cn
http://advanced.kjawz.cn
http://arthromeric.kjawz.cn
http://abstraction.kjawz.cn
http://advertence.kjawz.cn
http://cedarbird.kjawz.cn
http://bluejeans.kjawz.cn
http://chiloe.kjawz.cn
http://abet.kjawz.cn
http://bipectinated.kjawz.cn
http://autoharp.kjawz.cn
http://biconvex.kjawz.cn
http://allusive.kjawz.cn
http://amentiferous.kjawz.cn
http://analytic.kjawz.cn
http://agonal.kjawz.cn
http://cetrimide.kjawz.cn
http://ailing.kjawz.cn
http://www.dtcms.com/a/280520.html

相关文章:

  • C语言操作符补充
  • linux系统------HAProxy 配置
  • 酷淘商场项目【从零到一详解】Web端抓包操作与测试报告(二)
  • 部署项目将dll放到system32?不可取
  • Ubuntu环境下的K3S集群搭建
  • 【如何理解SerializedProperty】
  • 【项目】-番茄时钟设计
  • 云手机隐私保护指南:如何保障账号与数据的云端安全?
  • 编程技能:多文件编译
  • 本地 LLM API Python 项目分步指南
  • 20250715给荣品RD-RK3588开发板刷Android14时打开USB鼠标
  • Android 获取 UserAgent (UA) 的三种方式深度解析:差异、风险与最佳实践
  • Hystrix与Resilience4j在微服务熔断降级中的应用对比与实战
  • 用 K-means 算法实现水果分堆
  • 《大数据技术原理与应用》实验报告四 MapReduce初级编程实践
  • 多网卡环境下访问跨网段设备的排查与配置指南
  • iOS高级开发工程师面试——关于网络
  • Python:消息队列(RabbitMQ)应用开发实践
  • 【C#地图显示教程:实现鼠标绘制图形操作】
  • 开通保存图片权限
  • 如何设计实现开发自助重启工具-01-设计篇
  • eVTOL分布式电推进(DEP)适航审定探究
  • Ajax接收java后端传递的json对象包含长整型被截断导致丢失精度的解决方案
  • 【橘子分布式】Thrift RPC(编程篇)
  • 亚矩阵云手机:破解 Yandex 广告平台多账号风控难题的利器
  • Redis学习系列之——高并发应用的缓存问题(二)
  • JDK1.8函数式编程实战(附日常工作案例,仅此一篇耐心看完彻底搞懂)
  • 17、鸿蒙Harmony Next开发:状态管理(组件拥有的状态和应用拥有的状态)
  • Vue获取上传Excel文件内容并展示在表格中
  • 【人工智能99问】神经网络的工作原理是什么?(4/99)