Fork me on GitHub
LINQ几个主要操作

先把准备工作做好,这步可以不看,创建一个数据库和两张表,下面是创建语句,很简单,大家都看得懂.

第一步:创建表和初始化数据

复制代码
--创建数据库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); }
结果:
复制代码

未完待续……

 
posted on 2013-01-22 09:32  HackerVirus  阅读(269)  评论(0编辑  收藏  举报