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

C#两个表多条件关联写法

文章目录

  • C#两个表多条件关联写法
    • 两个表实体类准备
    • 实体类数据初始化
    • 第一种 sql的左关联
    • 第二种相当于sql的 INNER JOIN
      • 写法一:FROM a FROM b where 多条件关联
      • 写法二: FROM JOIN INTO
      • 写法三: FROM JOIN 省略into

C#两个表多条件关联写法

两个表实体类准备

 public class OtherIn
  {
      public string AfterOrderNo { get; set; }
      public long MaterialId { get; set; }
      public string MaterNumber { get; set; }
      public long Qty { get; set; }
      public string Note { get; set; }
  }

  public class AfterInfo
  {
      public string AfterOrderNo { get; set; }
      public long MaterialId { get; set; }
      public string MaterNumber { get; set; }
      public long AfterQty { get; set; }
      public string Note { get; set; }
  }

实体类数据初始化

List<OtherIn> getOtherInGroup = new List<OtherIn>();
 getOtherInGroup.Add(new OtherIn 
  { 
      AfterOrderNo= "SH231025001",
      MaterialId=100001,
      MaterNumber="CTG001",
      Qty=2
  });
  getOtherInGroup.Add(new OtherIn
  {
      AfterOrderNo = "SH231025001",
      MaterialId = 100002,
      MaterNumber = "CTG002",
      Qty = 3
  });
  getOtherInGroup.Add(new OtherIn
  {
      AfterOrderNo = "SH231025002",
      MaterialId = 100002,
      MaterNumber = "CTG002",
      Qty = 4
  });
  List<AfterInfo> getAfterGroup = new List<AfterInfo>();
  getAfterGroup.Add(new AfterInfo 
  {
      AfterOrderNo = "SH231025002",
      MaterialId = 100002,
      MaterNumber = "CTG002",
      AfterQty = 5
  });
  getAfterGroup.Add(new AfterInfo
  {
      AfterOrderNo = "SH231025001",
      MaterialId = 100001,
      MaterNumber = "CTG001",
      AfterQty = 1
  });

第一种 sql的左关联

FROM a JOIN b on 组合键关联 into 临时表 from 临时表(左关联不上右边默认为空)

  var getExcessGroup = from a in getOtherInGroup
                                 join b in getAfterGroup on new { a.AfterOrderNo, a.MaterialId } equals new { b.AfterOrderNo,b.MaterialId }
                                 into result
                                 from c in result.DefaultIfEmpty()
                                 select new
                                 {
                                     AfterOrderNo = a.AfterOrderNo,
                                     MaterialId=a.MaterialId,
                                     Qty = a.Qty,
                                     AfterQty = c == null ? 0 : c.AfterQty
                                 };

结果
在这里插入图片描述

第二种相当于sql的 INNER JOIN

写法一:FROM a FROM b where 多条件关联

 var getExcessGroup2 = from a in getOtherInGroup
                                  from b in getAfterGroup
                                  where a.AfterOrderNo == b.AfterOrderNo && a.MaterialId == b.MaterialId
                                  select new
                                  {
                                      AfterOrderNo = a.AfterOrderNo,
                                      MaterialId = a.MaterialId,
                                      Qty = a.Qty,
                                      AfterQty = b == null ? 0 : b.AfterQty
                                  };

结果
在这里插入图片描述

写法二: FROM JOIN INTO

FROM a JOIN b on 组合键关联 into 临时表 from 临时表(不默认为空)

var getExcessGroup1 = from a in getOtherInGroup
                                 join b in getAfterGroup on new { a.AfterOrderNo, a.MaterialId } equals new { b.AfterOrderNo, b.MaterialId }
                                 into result
                                 from c in result
                                 select new
                                 {
                                     AfterOrderNo = a.AfterOrderNo,
                                     MaterialId = a.MaterialId,
                                     Qty = a.Qty,
                                     AfterQty = c == null ? 0 : c.AfterQty
                                 };

结果
在这里插入图片描述

写法三: FROM JOIN 省略into

var getExcessGroup11 = from a in getOtherInGroup
                                  join b in getAfterGroup on new { a.AfterOrderNo, a.MaterialId } equals new { b.AfterOrderNo, b.MaterialId }
                                  select new
                                  {
                                      AfterOrderNo = a.AfterOrderNo,
                                      MaterialId = a.MaterialId,
                                      Qty = a.Qty,
                                      AfterQty = b.AfterQty
                                  };

结果
在这里插入图片描述


http://www.kler.cn/news/108832.html

相关文章:

  • 基于springboot,vue校园社团管理系统
  • 【pandas技巧】group by+agg+transform函数
  • Mysql第四篇---数据库索引优化与查询优化
  • IconWorkshop中文官方版下载_IconWorkshop最新版下载v6.91汉化破解版下载
  • Docker安装部署Elasticsearch+Kibana+IK分词器
  • 网络搭建和运维的基础题目
  • C++设计模式_16_Adapter 适配器
  • Java游戏修炼手册:2023 最新学习线路图
  • EtherNet/IP转profienrt协议网关连接EtherNet/IP协议的川崎机器人配置方法
  • 【LeetCode】3. 无重复字符的最长子串
  • 二叉树的概念
  • 竹云产品入选《2023年度上海市网络安全产业创新攻关成果目录》
  • 【操作系统】进程的控制和通信
  • Pytorch整体工作流程代码详解(新手入门)
  • selenium工作原理和反爬分析
  • JavaWeb 怎么在servlet向页面输出Html元素?
  • Leetcode.274 H 指数
  • Starknet开发工具
  • 解决找不到vcruntime140.dll,无法继续执行代码方法
  • SOLIDWORKS PDM 2024数据管理5大新功能
  • 简单方法搭建个人网站
  • DeOldify 接口化改造 集成 Flask
  • STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据
  • git 推送到github远程仓库细节处理(全网最良心)
  • matlab中narginchk函数用法及其举例
  • FPGA_状态机工作原理
  • 前端小技巧: TS实现new出一个对象的内部过程
  • 独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构
  • maven环境变量,安装源,本地仓库配置
  • STM32F10xx 存储器和总线架构