专题二 LINQ和LINQ to Objects
更新时间:2023-05-29 17:00:01 阅读量: 实用文档 文档下载
linq
专题二 LINQ和LINQ to Objects
Hands-On实训教程系列
linq
教学目标理解LINQ基本概念 掌握常用标准查询操作符 掌握查询表达式编写方法
Hands-On实训教程系列
linq
工作任务
使用LINQ实现员工管理系统。
Hands-On实训教程系列
linq
创建解决方案
在Visual Studio 2008中新建一个控制台应用 程序,并将项目命名为“ConsoleLINQEmp”。
Hands-On实训教程系列
linq
创建实体类
在默认添加的Program.cs文件中,创建部门 和员工两个实体类public class Department { public int DeptId { set; get; } //部门编号 public string DeptName { set; get; } //部门名称 } public class Employee { public int EmpId { set; get; } //员工编号 public string EmpName { set; get; } //员工姓名 public Department Dept { set; get; } //所属部门 }
Hands-On实训教程系列
linq
创建GenericQuery 类
在Program.cs文件中再添加一个名为 “GenericQuery”的类,先在类中声明两个 List类型的属性,再在构造函数中为这两个属 性赋值,为LINQ查询准备数据源public class GenericQuery { public List<Department> Depts { set; get; } public List<Employee> Emps { set; get; } public GenericQuery() { Department dept1 = new Department { DeptId = 1, DeptName = "资财部" }; Department dept2 = new Department { DeptId = 2, DeptName = "市场部" }; Depts = new List<Department> { dept1, dept2 }; Employee emp1 = new Employee { EmpId = 1002, EmpName = "张三", Dept = dept1 }; Employee emp2 = new Employee { EmpId = 1001, EmpName = "李四", Dept = dept1 }; Employee emp3 = new Employee { EmpId = 2001, EmpName = "王五", Dept = dept2 }; Emps = new List<Employee> { emp1, emp2, emp3 }; } }
Hands-On实训教程系列
linq
GetEmpsByDeptIdNoOrder 方法
在GenericQuery类中添加一个名为 “GetEmpsByDeptIdNoOrder”的方法,根 据部门编号查询出该部门的所有员工信息public IEnumerable<Employee> GetEmpsByDeptIdNoOrder(int deptid) { IEnumerable<Employee> employees = from e in Emps where e.Dept.DeptId == deptid select e; return employees; } IEnumerable<Employee> employees = Emps.Where(e => e.Dept.DeptId == deptid);
Hands-On实训教程系列
linq
GetEmpsByDeptIdOrder 方法
根据部门编号查询该部门的员工信息,但是对 查询结果按照员工编号进行排序public IEnumerable<Employee> GetEmpsByDeptIdOrder(int deptid) { IEnumerable<Employee> employees = from e in Emps where e.Dept.DeptId == deptid orderby e.EmpId select e; return employees; } IEnumerable<Employee> employees = Emps.Where(e => e.Dept.DeptId == deptid).OrderBy(e => e.EmpId); Hands-On实训教程系列
linq
GetEmpsByDeptIdOrderList 方法
将查询的结果转换为存储在缓存中的IList泛型 集合,public IList<Employee> GetEmpsByDeptIdOrderList (int deptid) { IList<Employee> employees = (from e in Emps where e.Dept.DeptId == deptid orderby e.EmpId select e).ToList(); return employees; } IList<Employee> employees =
Emps.Where(e => e.Dept.DeptId == deptid).OrderBy (e => e.EmpId).ToList();
Hands-On实训教程系列
linq
方法调用
在Program类的Main方法内,创建一个 GenericQuery类的实例后分别调用上面创建 的三个方法static void Main(string[] args) { GenericQuery query = new GenericQuery(); IEnumerable<Employee> empsNoOrder = query.GetEmpsByDeptIdNoOrder(1); IEnumerable<Employee> empsOrder = query.GetEmpsByDeptIdOrder(1); IList<Employee> empList = query.GetEmpsByDeptIdOrderList(1); }
Hands-On实训教程系列
linq
输出结果
在Main方法中继续添加代码将查询的结果输 出,以不同的形式显示部门1中的员工信息Console.WriteLine("编号是1的部门包含的员工信息:"); Console.WriteLine("未排序:"); foreach (Employee emp in empsNoOrder) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId, emp.EmpName); } Console.WriteLine(); Console.WriteLine("按员工编号排序:"); foreach (Employee emp in empsOrder) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId, emp.EmpName); } Console.WriteLine(); Console.WriteLine("按员工编号排序,返回IList:"); foreach (Employee emp in empList) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId, emp.EmpName); } Console.WriteLine();
Hands-On实训教程系列
linq
添加员工并重新显示
Main方法的最后编写代码添加一名员工query.Emps.Add(new Employee { EmpId = 1003, EmpName = "马六", Dept = query.Depts[0] });
重新显示部门1中的员工信息Console.WriteLine("添加一名员工后编号是1的部门包含的员工信息:"); Console.WriteLine("未排序:"); foreach (Employee emp in empsNoOrder) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId,emp.EmpName); } Console.WriteLine(); Console.WriteLine("按员工编号排序:"); foreach (Employee emp in empsOrder) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId,emp.EmpName); } Console.WriteLine(); Console.WriteLine("按员工编号排序,返回IList:"); foreach (Employee emp in empList) { Console.WriteLine("{0} {1} {2} ", emp.Dept.DeptName, emp.EmpId,emp.EmpName); } Console.Read();
Hands-On实训教程系列
linq
启动程序
按F5键启动调试
Hands-On实训教程系列
linq
总结理解LINQ基本概念 掌握常用标准查询操作符 掌握查询表达式编写方法
Hands-On实训教程系列
linq
LINQ介绍LINQ(Language Intergrated Query,语言 集成查询),将一组通用的标准查询运算符集 成到了Visual C#和Visual Basic的语言语法 中,是一系列标准查询操作符的集合。 LINQ是Visual Studio 2008和.NET Framework 3.5版中一项突破性的创新,它在 对象领域和数据领域之间架起了一座桥梁。
Hands-On实训教程系列
linq
LINQ查询操作所有的LINQ查询操作都由以下三个不同的操 作组成: Class Program { static void 获取数据源 Main() { // 1.获取数据源 创建查询 in
t[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. 创建查询 numQuery = 执行查询 IEnumerable<int>(num % 2) == from num in numbers where 0 select num; // 3. 执行查询 foreach (int num in numQuery) { Console.Write("{0} ", num); } } }
Hands-On实训教程系列
linq
LINQ创建查询
“创建查询”,只是创建了一个查询变量,并 为它赋值,它的功能是保存查询语句;真正的 执行要等到第三个操作“执行查询”。
Hands-On实训教程系列
linq
数据源在.NET中,根据数据源的不同,LINQ提供了 以下组件以完成最常用的查询: LINQ to Objects LINQ to XML LINQ to DataSet LINQ to SQL LINQ to Entities
Hands-On实训教程系列
linq
创建查询LINQ中的“查询”指定要从数据源中检索的 信息,并且可以指定在返回这些信息之前如何 对其进行排序、分组和结构化。查询存储在查 询变量中。 可以通过两种语法来创建查询,即使用查询表 达式的查询语法和使用方法的方法语法。
Hands-On实训教程系列
linq
使用查询语法创建查询查询表达式必须以from子句开头,并且必须 以select或group子句结尾。在第一个from子 句和最后一个select或group子句之间,查询 表达式可以包含一个或多个下列可选子句: where、orderby、join、let甚至附加的from var 0 子句。 data=from num in numbers where (num % 2) ==select num; 还可以使用into关键字使join或group子句的 结果能够充当同一查询表达式中附加查询子句 的源。 Hands-On实训教程系列
linq
LINQ to Objects介绍LINQ to Objects的数据源是任意的 IEnumerable或IEnumerable<T>集合,是内 存中的数据集合,LINQ可以直接对这两类数 据源进行查询,而无需使用数据提供程序。 LINQ to Objects中的数据源集合必须实现 IEnumerable<T>或IEnumerable接口。
Hands-On实训教程系列
正在阅读:
解放碑作文400字02-05
20CrMnTi钢高温组织变化规律与最佳渗碳温度选择05-22
关于中学生以争做追梦人为话题优秀作文八篇08-05
读《我的堂兄刘家桥》有感02-22
这次,我没有流泪作文700字07-02
临床放射生物学基础10-24
南宁市某居住小区岩土工程详细勘察报告08-25
国际经济学复习资料01-31
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- LINQ
- Objects
- 专题
- 高中政治人教版必修四 第一单元 第一课 第二框 关于世界观的学说
- 医学微生物学试题集和答案
- 临汾站1-12.0m旅客地道支架方案应力检算书
- 中等职业学校专业目录新旧对照表
- 太阳能手机充电器含
- 2012届高考一轮复习政治课时作业第二十一课 文化与社会
- 汽轮机主油泵与交流润滑油泵切换失败原因及对策
- 2016年大学英语六级阅读备战方法
- 2011年职称英语等级考试真题参考答案及解析(理工类B级)
- 一个自由而负责的新闻界
- 【精品】毕业设计-C650卧式车床的控制系统的PLC控制改造
- 苏教小学语文四年级上维生素C的故事
- 第五章 食品实验室仪器设备管理
- 某露天矿山GPS车辆智能调度系统设计方案
- 湖南四建三水污水处理厂工程施工组织设计
- 2011政治经济学考研(三)
- 设备九项管理制度
- 第二章-2-慢性阻塞性肺疾病
- 安徽省九年级月考试卷(2016中考名校调研卷)英语试题
- 安全无小事--小学生安全教育课