先把准备工作做好,这步可以不看,创建一个数据库和两张表,下面是创建语句,很简单,大家都看得懂.
第一步:创建表和初始化数据
--创建数据库Student create database Student go use Student --创建数据表T_Student create table T_Student( ID int not null identity primary key, Name varchar(20) not null, EnglishName varchar(20) not null, Age int, Birthday date, Country varchar(50) ) --创建数据表T_Score,设置主外键关系 create table T_Score( ID int not null identity primary key, StudentID int not null foreign key references T_Student(ID), English varchar(20) not null, Math varchar(20) not null, Chinese varchar(20) not null ) go --向T_Student插入数据 insert into T_Student select '李正兴','Black_Li',19,'1991-03-17','江苏盐城' union select '罗海','Jason',21,'1991-10-17','江苏南京' union select '张士阳','Huk',35,'1991-12-18','安徽阜阳' union select '吕佳惠','Lily',23,'1991-06-23','四川' union select '金琢','Babylon',23,'1991-03-15','江苏扬州' --向T_Score插入数据 insert into T_Score select 1,'90','84','68' union select 2,'87','78','78' union select 3,'79','87','88' union select 4,'95','84','89' union select 5,'90','84','58' go
学生表:
成绩表:
第二步:创建两张表对应的实体
View Code
View Code
第三步:创建学生管理类(其中用到了自己写的SQLHelper,也贴出来)
View Code
View Code
第四步:LINQ开始,在Program.cs类中
static void Main(string[] args) { DoWork(); Console.ReadKey(); } /// <summary> /// 做某些操作函数 /// </summary> static void DoWork() { //创建学生管理对象 StudentManage SM = new StudentManage(); //获取所有学生存放于集合students中 List<Student> students = SM.GetAllStudents(); //获取所有成绩存放于集合scores中 List<Score> scores = SM.GetAllScores(); }
A、查询
//查询语句,将所有学生姓名取出来放入集合中 //IEnumerable<string> names = students.Select(s=>s.Name); //或者 IEnumerable<string> names = from s in students select s.Name; foreach (string name in names) { Console.WriteLine(name); }
结果:
var stus = students.Select(s=>new { Name = s.Name, Age = s.Age }); //或者 //var stus = from s in students select new { Name = s.Name, Age = s.Age }; foreach (var s in stus) { Console.WriteLine(s); }
结果:
B、筛选
//筛选语句,将符合条件的学生姓名取出来 //IEnumerable<Student> stus = students.Where(stu => string.Equals(stu.Country,"四川")).Select(stu=>stu); //或者 IEnumerable<Student> stus = from stu in students where string.Equals(stu.Country, "四川") select stu; foreach (Student stu in stus) { Console.WriteLine(stu.ToString()); }
结果:
C、排序
//根据学号降序,默认升序 //var stus = students.OrderByDescending(stu => stu.ID).Select(stu => new {Number=stu.ID,Name=stu.Name}); //或者 var stus = from stu in students orderby stu.ID descending select new { Number = stu.ID, Name = stu.Name }; foreach (var stu in stus) { Console.WriteLine(stu); }
结果:
D、分组
//根据年龄分组 //var stusGroup = students.GroupBy(stu=>stu.Age); //或者 var stusGroup = from stu in students group stu by stu.Age; //遍历组信息 foreach (var grop in stusGroup) { Console.WriteLine("这是年龄为"+grop.Key+"组"); Console.WriteLine("该组成员如下:"); //遍历组成员信息 foreach(var stu in grop) { Console.WriteLine("姓名:"+stu.Name+" 年龄:"+stu.Age); } Console.WriteLine(); }
结果:
E、结果集去除重复与计数
//取出所有年龄,过滤掉重复,统计个数 int number = students.Select(stu => stu.Age).Distinct().Count();
F、联合查询
//创建学生管理对象 StudentManage SM = new StudentManage(); //获取所有学生存放于集合students中 List<Student> students = SM.GetAllStudents(); //获取所有成绩存放于集合scores中 List<Score> scores = SM.GetAllScores(); //联合学生和成绩表 //var StuScores = students.Select(stu => stu).Join
(scores, stus => stus.ID, scors => scors.StudentID, (stus, scors) =>
new {stus.Name,stus.Age,scors.Chinese,scors.English}); //输出 //或者 var StuScores = from stu in students join score in scores
on stu.ID equals score.StudentID
select new { stu.Name, stu.Age, score.Chinese, score.English }; foreach (var stuscore in StuScores) { Console.WriteLine(stuscore); }
结果:
未完待续……
分类: [07] 学习笔记-LINQ