MVC学习笔记(四)---使用linq多表联查(SQL)
1.数据库原型(Students表中的ID和Scores表中的StudentID是对应的)

2.实现效果:查询出每个学生各个科目的成绩(用的是MVC学习笔记(三)—用EF向数据库中添加数据的架构)
C#代码
public ActionResult Index()
{
try
{
EFContextDB db = new EFContextDB();
List<StudentScoreView> scoreList = new List<StudentScoreView>();
scoreList = (from s in db.Students
join
c in db.Scores on s.ID equals c.StudentID
select new StudentScoreView
{
ID = s.ID,
Name = s.Name,
Subject = c.Subject,
Score = c.StudentScore,
School = s.School
}).ToList();
return Json(scoreList, JsonRequestBehavior.AllowGet);
}
catch(Exception ex)
{
return Json("err", JsonRequestBehavior.AllowGet);
}
}
加了一个显示类studentScoreView
public class StudentScoreView
{
/// <summary>
/// 主键
/// </summary>
public Guid ID { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 学校
/// </summary>
public string School { get; set; } /// <summary>
/// 分数
/// </summary>
public int Score { get; set; } /// <summary>
/// 科目
/// </summary>
public string Subject { get; set; }
}
3.最后返回json结果
[{
"ID": "5eaaff20-f806-4116-a387-39b44c4c76e0",
"Name": "李四",
"School": "厦门大学",
"Score": ,
"Subject": "语文"
}, {
"ID": "5eaaff20-f806-4116-a387-39b44c4c76e0",
"Name": "李四",
"School": "厦门大学",
"Score": ,
"Subject": "数学"
}, {
"ID": "5eaaff20-f806-4116-a387-39b44c4c76e0",
"Name": "李四",
"School": "厦门大学",
"Score": ,
"Subject": "英语"
}, {
"ID": "662bf2f7-3680-490c-8ff8-9208e4e5f362",
"Name": "张三",
"School": "北京大学",
"Score": ,
"Subject": "语文"
}, {
"ID": "662bf2f7-3680-490c-8ff8-9208e4e5f362",
"Name": "张三",
"School": "北京大学",
"Score": ,
"Subject": "数学"
}, {
"ID": "662bf2f7-3680-490c-8ff8-9208e4e5f362",
"Name": "张三",
"School": "北京大学",
"Score": ,
"Subject": "英语"
}, {
"ID": "5eaaff20-f806-4116-a387-39b44c4c76e0",
"Name": "小明",
"School": "中山大学",
"Score": ,
"Subject": "语文"
}, {
"ID": "4321592e-863f-411a-b044-9478952c29d1",
"Name": "小明",
"School": "中山大学",
"Score": ,
"Subject": "数学"
}, {
"ID": "4321592e-863f-411a-b044-9478952c29d1",
"Name": "小明",
"School": "中山大学",
"Score": ,
"Subject": "英语"
}]
linq中多条件的写法 用&&来连接
4.在实际过程中可能会遇到格式化字符串等等,按照下面方式(加上AsEnumerable())就可以了。
public ActionResult Index()
{
try
{
EFContextDB db = new EFContextDB();
List<StudentScoreView> scoreList = new List<StudentScoreView>();
scoreList = (from s in db.Students.AsEnumerable()
join
c in db.Scores.AsEnumerable() on s.ID equals c.StudentID
select new StudentScoreView
{
ID = s.ID,
Name = s.Name,
Subject = c.Subject,
Score = c.StudentScore,
School = s.School,
ApplyTime = i.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
}).ToList();
return Json(scoreList, JsonRequestBehavior.AllowGet);
}
catch(Exception ex)
{
return Json("err", JsonRequestBehavior.AllowGet);
}
}
小插曲:中间在编译的过程中,遇到了“未能找到查询的实现”,解决方法是引用命名空间:using System.Linq
写在后面的话:不积跬步无以至千里,我喜欢用文字记录下自己学习的过程,虽然每一篇都是小知识点,每一篇都很简单,但我相信量变会引起质变,加油!
MVC学习笔记(四)---使用linq多表联查(SQL)的更多相关文章
- C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...
- Linq学习笔记四之linq to sql 的基本操作
首先需要在项目中新增一个 linq to sql 的服务 新增项,数据,LINQ TO sql 类的这个方法 第二步需要一个model类,用作映射 [Table] public class S_ZD ...
- C#学习笔记四(LINQ,错误和异常,异步编程,反射元数据和动态编程)
LINQ 1.使用类似的数据库语言来操作集合? 错误和异常 异步编程 1.异步和线程的区别: 多线程和异步操作两者都可以达到避免调用线程阻塞的目的.但是,多线程和异步操作还是有一些区别的.而这些区别造 ...
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
- Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...
- .NET MVC 学习笔记(五)— Data Validation
.NET MVC 学习笔记(五)—— Data Validation 在实际应用中,我们需要对数据进行增查改删业务,在添加和修改过程中,无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...
随机推荐
- 修改Docker容器启动配置参数
有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...
- Excel多表头设置二级联动选择
1.初始准备 2.全选,然后开始 -> 查找和选择 -> 定位条件 3.公式 -> 根据所选内容创建 因为一级联动数据在第一行,所以选首行 4.因为学校信息与联动数据不在同一个she ...
- 分析 Kaggle TOP0.1% 如何处理文本数据
感觉大佬的代码写的就是好,在处理数据的方面,首先定义一个 提取特征的类, class Extractor(object):,然后每一种方法对这个类进行重构,这个类主要结构就是: class Extra ...
- 《Maven实战》整理
一.maven介绍 Maven是优秀的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署. Maven能帮助我们标准化构建过程.在Maven之前,十个项目可能有十种构建方 ...
- Filebeat的使用
前言 logstash本身就可以具有文件数据采集的功能了,为什么还需要在前面加一层filebeat?理由如下:logstash是使用Java编写,插件是使用JRuby编写,对机器的资源要求会比较高,在 ...
- HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型
HandlerMethodArgumentResolver SpringMVC 参数解析 继承关系以及各解析器解析类型 I HandlerMethodArgumentResolver (org.spr ...
- ubuntu 16.04 安装teamviewer
很多人可能会问,为什么要在ubuntu上安装teamview?shell不就够用了吗?但实际上,很多时候,在远程连接linux的时候,我们需要在图形用户界面上进行操作.现在我就遇到了一个实际的问题:每 ...
- MacOSX 虚拟机与宿主机的网络配置
环境:MacOSX.VMware Fusion11.5.CentOS6 比较重要的两个网卡 安装虚拟机后,宿主机会多出几个网卡,其中vmnet1对应的Bridge(桥接方式),vmnet8对应NAT方 ...
- 利用nvidia-smi 管理和监控NVIDIA GPU设备
NVIDIA系统管理界面介绍 原文来源:https://developer.nvidia.com/nvidia-system-management-interface NVIDIA系统管理界面(nvi ...
- Kafka高级设计和架构,一文深化理解
主题: 1.kafka是写磁盘还是写内存? 2.kafka究竟是由 consumer 从 broker 那里拉数据,还是由 broker 将数据推到 consumer? 3.如何区分已消费(consu ...