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

使用Linq进行多表查询(C#)

本文材料

创建一个学生 Student 模型

public class Student
{public string sno { get; set; }public string sname { get; set; }public string ssex { get; set; }public DateTime? birthday { get; set; }public string specialty { get; set; }public string grade { get; set; }    
}

创建一个成绩 sc模型

public class sc
{public string sno { get; set; }public string cno { get; set; }public byte? score { get; set; }
}

创建一个课程 course模型

public class course
{public string cno { get; set; }public string cname { get; set; }public byte? classhour { get; set; }public byte? credit { get; set; }
}

创建一个 StudentScCourse模型,用于多表关联查询

public class StudentScCourse
{public string sno { get; set; }public string sname { get; set; }public string cno { get; set; }public string? cname { get; set; }public byte? score { get; set; }
}

创建上下文 DbContext类

public class AppDbContext : DbContext
{public AppDbContext(DbContextOptions<AppDbContext> options) : base(options){}public DbSet<Student> student { get; set; }public DbSet<sc> sc { get; set; }public DbSet<course> course { get; set; }// 使用 HasKey()方法给 sc表创建双主键protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<sc>().HasKey(e => new { e.sno, e.cno });}
}

一、Linq单表查询

简单查询

_context.student;

单条件数据过滤

_context.student.Where(n => n.sno == sno.Trim()).FirstOrDefault();

多字段模糊匹配数据过滤

if (!string.IsNullOrEmpty(keyword))
{return _context.student.Where(n => n.sno.Contains(keyword) ||n.sname.Contains(keyword) ||n.ssex.Contains(keyword) ||n.specialty.Contains(keyword) ||n.grade.Contains(keyword));
}

二、Linq多表查询

IEnumerable<StudentScCourse> result =from students in _context.studentjoin scs in _context.sc on students.sno equals scs.snointo studentScsfrom scs in studentScs.DefaultIfEmpty()join courses in _context.course on   scs.cno equals courses.cnointo scCorsefrom courses in scCorse.DefaultIfEmpty()// 使用 where进行数据过滤where students.sno.Contains(keyword) || students.sname.Contains(keyword) ||scs.cno.Contains(keyword) ||courses.cname.Contains(keyword) ||keyword == null// 使用 select 关键字来选中查询的结构select new StudentScCourse{sno = students.sno,sname = students.sname,cno = scs.cno,cname = courses.cname,score = scs.score};

在查询时,可以使用 join函数进行多表关联查询;可以使用 join   into 进行左关联查询。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • verilog vscode 与AI 插件
  • C#使用TCP-S7协议读写西门子PLC(四)
  • FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules
  • docker 学习笔记
  • 初识爬虫1
  • 数据结构————栈的讲解(超详细!!!)
  • 基于SpringBoot的租房网站系统
  • AutoDL云计算GPT-SoVITS-TTS语音声色克隆语音合成
  • Rasa: Rasa Core中的相关概念及用法
  • Oracle数据恢复—Oracle数据库误删除表数据如何恢复数据?
  • WPF UpdateSourceTrigger属性
  • 使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • STL和C++11
  • vscode设置vue标签不换行
  • 捕获和处理异常非常重要
  • 【Leetcode】101. 对称二叉树
  • [Vue CLI 3] 配置解析之 css.extract
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 0基础学习移动端适配
  • 77. Combinations
  • canvas 五子棋游戏
  • JavaScript 一些 DOM 的知识点
  • Spring声明式事务管理之一:五大属性分析
  • vue中实现单选
  • Windows Containers 大冒险: 容器网络
  • 记录:CentOS7.2配置LNMP环境记录
  • 简单基于spring的redis配置(单机和集群模式)
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 我建了一个叫Hello World的项目
  • 新版博客前端前瞻
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • UI设计初学者应该如何入门?
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • (12)目标检测_SSD基于pytorch搭建代码
  • (14)Hive调优——合并小文件
  • (3)STL算法之搜索
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • *p++,*(p++),*++p,(*p)++区别?
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .DFS.
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core 2.1路线图
  • .NET Core 版本不支持的问题
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET delegate 委托 、 Event 事件
  • .NET面试题(二)
  • @component注解的分类
  • @JSONField或@JsonProperty注解使用
  • [ C++ ] 类和对象( 下 )
  • [ Linux ] Linux信号概述 信号的产生
  • [].slice.call()将类数组转化为真正的数组