```
### 同名Action
使用请求方式的不同区分两个同名Action
```
[HttpGet] //区别1,
public IActionResult DL() //区别2,参数不一样
```
```
[HttpPost]
public IActionResult DL(string acc ,string pwd)
```
## Linq和Lambda
对数据的操作会频繁使用Linq和Lambda语法
### 1. 使用Linq和Lambda语法筛选数组
```
//使用Linq筛选数组中50-80的数据
var linqRes=from v in arr
where v>=50 && v<80
select v;
ViewBag.linqRes = linqRes;
//使用Lambda筛选数组中50-80的数据
var lambdaRes = arr.Where(p => (p >= 50 && p <= 80));
ViewBag.lambdaRes = lambdaRes;
```
### 2. 使用Linq和Lambda进行条件查询

```
#region 查询工资在5000及以上,电话以132开头的员工信息
public IActionResult Demo02()
{
List list=new List
list=LoadEmployee();
//
}
```
## EF框架基础
ORM概述:
ORM全称是:对象-关系映射
ORM是将关系数据库中的数据用对象的形式表现出来,并通过面向对象的方式将这些对象组织起来,实现系统业务逻辑的过程。
Enity Framework(简称EF):
ASP.NET MVC应用程序推荐使用ORM框架;
### 资料准备
```
create table Dept --部门信息
(
DeptId int primary key identity(1,1),
DeptName varchar(50) not null
)
create table Employee --员工信息
(
EmpId int primary key identity(1,1),
DeptId int not null,
EmpName varchar(50) not null,
EmpPhone varchar(50) not null,
EmpArea varchar(50) not null,
EmpSalary decimal(18,2) not null
)
insert into Dept(DeptName) values('开发部')
insert into Dept(DeptName) values('测试部')
insert into Dept(DeptName) values('实施部')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(1,'刘德华','13887855552','武汉','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(2,'张学友','13556528634','深圳','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(3,'刘亦菲','13448494546','广州','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(1,'周杰伦','13888666855','北京','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(2,'许巍','13868654219','上海','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(3,'孙燕姿','13895133572','成都','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(1,'朴树','13458788896','武汉','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(2,'周润发','13554588745','南京','6500')
insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(3,'李连杰','13998759654','上海','6500')
select * from Dept
select * from Employee
```
### EF框架的安装

使用命令安装dotnet-ef(实际上是无效的操作)
```
//项目--右键--在终端打开--输入下面命令
dotnet tool install --global dotnet-ef --version 7.0.9
//直接在Nuget管理中点击安装会报错
```
报错,vs2022已安装9.0.1版本,且不可卸载,所以7.0.9版本是无法安装的。其实不按照7.0.9版本仍可以正常使用
生成文件
1.1
```
dotnet ef dbcontext scaffold "Data Source=SAN-PC\WINCCPLUSMIG2014;Initial Catalog=DBTEST;Persist Security Info=True;User ID=sa;Password=sa;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer --output-dir Models
```
笔记:Data Source=.是用不了的,改成 Data Source=SAN-PC\WINCCPLUSMIG2014才可以用
1.2 另外appsetting.json文件也做了修改
```
{
"ConnectionStrings": {
"DefaultConnection": "Server=SAN-PC\\WINCCPLUSMIG2014;Database=DBTEST;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
```
## 三. linq和lambda进行条件查询
## 四. linq和lambda进行排序
Chp02Controller.cs
```
#region 先安照工资降序,后按照编号的降序进行排列
public IActionResult Demo03()
{
List list= new List();//创造数据
list = LoadEmployee();//加载数据
//linq(ascending:正序;descending:倒序)
var listLinq= from emp in list
orderby emp.EmpSalary descending,emp.EmpId descending select emp;
ViewBag.listLinq= listLinq;
//lambda(OrderBy:正序;OrderByDescending:倒序;第二次排序使用ThenBy)
var listLambda=list.OrderByDescending(p=>p.EmpSalary).ThenByDescending(p=>p.EmpId);
ViewBag.listLambda= listLambda;
return View();
}
#endregion
```
Demo03.cshtml
```
使用Linq查询员工信息,先安照工资降序,后按照编号的降序进行排列
员工编号:
部门编号:
姓名:
电话:
工资:
@foreach (var item in ViewBag.listLinq)
{
@item.EmpId
@item.DeptId
@item.EmpName
@item.EmpPhone
@item.EmpSalary
}
使用Lambda查询员工信息,先安照工资降序,后按照编号的降序进行排列
员工编号:
部门编号:
姓名:
电话:
工资:
@foreach (var item in ViewBag.listLambda)
{
@item.EmpId
@item.DeptId
@item.EmpName
@item.EmpPhone
@item.EmpSalary
}
```
## 五. linq和lambda进行分组
Chp02Controller.cs
```
#region 使用linq和lambda进行分组
public IActionResult Demo04()
{
//按照部门编号分组显示
List list = new List();//创造数据
list = LoadEmployee();//加载数据
//linq方式
var listLinq = from emp in list
group emp by emp.DeptId;
ViewBag.listLinq= listLinq;
//lambda方式
var listLambda = list.GroupBy(p => p.DeptId);
ViewBag.listLambda= listLambda;
return View();
}
#endregion
```
Demo04.cshtml
```
按照部门编号分组显示员工信息
@foreach (var myList in ViewBag.listLinq)
{
@foreach (var item in myList)
{
部门编号:@item.DeptId
break;
}
员工编号
部门编号
员工姓名
员工电话
员工工资
@foreach (var item in myList)
{
@item.EmpId
@item.DeptId
@item.EmpName
@item.EmpPhone
@item.EmpSalary
}
}
```
## 五. linq和lambda进行分组加聚合条件
按照部门编号分组显示员工信息(只查询平均工资在5000及以上的组)
```
//linq方式
var listLinq = from emp in list
group emp by emp.DeptId
into g
where g.Average(p => p.EmpSalary) >= 5000
select g;
ViewBag.listLinq = listLinq;
lambda先安照工资降序,后按照编号的降序进行排列
```
## 六. 匿名类集合的显示
实体类中(模型中)不存在的数据要想显示在表格中,需要使用到匿名类。
```
@{
Layout = null;
}
Demo06