static void Main(string[] args) { try { //数据库连接字串 string connection = "Data Source=.\\SQLExpress;Initial Catalog=DataStudentsDataContext;Trusted_Connection=true"; //实例化DataStudentsDataContext类 DataStudentsDataContext linq = new DataStudentsDataContext(connection); #region 删除数据库 if (linq.DatabaseExists()) linq.DeleteDatabase(); //return; #endregion #region 创建数据库 //如果DataStudents数据库不存在则创建该数据库 if (!linq.DatabaseExists()) linq.CreateDatabase(); #endregion #region 添加表记录 Console.Title = "在数据库中创建学生信息表"; //清空学生信息表 var stsClear = from st in linq.student select st; linq.student.DeleteAllOnSubmit(stsClear); linq.SubmitChanges(); string[] surnames = new string[] { //姓数组 "郑", "胡", "张", "李", "王", "赵", "周", "刘", "钱", "孙"}; string[] names = new string[] { //名数组 "一","二","三","四","五", "六","七","八","九","十"}; int number = 20120001; //学号起始值 Random r = new Random(); //伪随机数生成器 for (int i = 0; i < 20; i++) {//随机生成学生信息 student student = new student(); //创建学生类 student.grade = (uint)r.Next(1, 5); //1到4之间随机年级 student.number = (uint)number++; //学号从起始值开始自增 student.name = surnames[r.Next(surnames.Length)] + names[r.Next(names.Length)]; //随机产生学生姓名 student.sex = r.Next(2) == 0 ? "男" : "女"; //男或女随机性别 student.age = (uint)r.Next(16, 24); //16到23之间随机年龄 student.result = (uint)r.Next(101); //0到100之间随机成绩 linq.student.InsertOnSubmit(student); //向数据库学生表中插入学生信息 linq.SubmitChanges(); //保存修改 } //分组查询添加的学生信息,并进行排序 var sts = from st in linq.student orderby st.grade, st.sex, st.result descending//按姓名,性别升序,按成绩降序 group st by new { st.grade, st.sex } into gst //按年级和性别分组 select new { gst.Key, gst }; sts.ToList().ForEach(gst => { //遍历每个分组,并统计 gst.gst.ToList().ForEach(st => Console.WriteLine(st)); });//遍历每组学生信息并输出 #endregion Console.ReadLine(); Console.Clear(); #region 查询表记录 Console.Title = "查询数据库成绩合格的男生信息"; var stsSel = (from st in linq.student //查询表学生信息表 where st.sex == "男" && st.result >= 60 //选择成绩大于60的男生 select st).OrderBy(st => st.number); //按学号排序 //查询成绩合格的男生信息 Console.WriteLine("成绩合格 的 男生 信息如下:"); stsSel.ToList().ForEach(st => Console.WriteLine(st)); #endregion Console.ReadLine(); Console.Clear(); #region 修改表数据 Console.Title = "在数据库中修改姓王的学生成绩"; var stsUpd = from st in linq.student where st.name.StartsWith("王") //模糊搜索 select st; Console.WriteLine("姓王的学生信息如下:"); foreach (var st in stsUpd) Console.WriteLine(st); foreach (var st in stsUpd) { if (st.result > 90) st.result = 100; //大于90分的修改成100分 else if (st.result < 60) st.result = 60; //小于60分的修改成60分 else st.result += 10; //60到90之间的加10分 } linq.SubmitChanges(); //保存修改 Console.ReadLine(); Console.Clear(); //查询并显示修改后姓王的学生信息 var stsSelLeft = from st in linq.student where st.name.StartsWith("王") select st; Console.WriteLine("修改后姓王的学生信息如下:"); foreach (var st in stsUpd) Console.WriteLine(st); #endregion Console.ReadLine(); Console.Clear(); #region 排序表数据 Console.Title = "降序排列数据库中各年级男生的成绩"; var stsSort = from st in linq.student //查询学生表 orderby st.grade //分组按年级升序排序 where st.sex == "男" //按性别过滤 group st by st.grade into gst //按年级分组 select new { gst.Key, //年级 sts = gst.OrderByDescending(s => s.result)//各年级内学生按成绩降序排序 }; foreach (var gst in stsSort) {//显示各年级男生信息 Console.WriteLine("{0}年级的男生信息如下:", gst.Key); foreach (var st in gst.sts) Console.WriteLine(st); } #endregion Console.ReadLine(); Console.Clear(); #region 统计表数据 Console.Title = "统计各年级学生成绩总分和平均年龄"; var stsSta = from st in linq.student group st by st.grade into gst //按年级分组 select new { gst.Key, //年级 sum = gst.Sum(st => st.result), //各年级成绩总和 avg = gst.Average(st => st.age) }; //各年级平均年龄 foreach (var gst in stsSta) //输出各年级部分和平抑年龄 Console.WriteLine("{0} 年级成绩总分为: {1} 平均年龄为: {2}", gst.Key, gst.sum, gst.avg); Console.ReadLine(); Console.Clear(); Console.Title = "统计男生和女生成绩的最高和最低分"; var stsBG = from st in linq.student group st by st.sex into gst //按性别分组 select new { gst.Key, //性别 max = gst.Max(st => st.result), //最好成绩 min = gst.Min(st => st.result) }; //最差成绩 foreach (var gst in stsBG) Console.WriteLine("{0}生 最高分为: {1} 最低分为: {2}", gst.Key, gst.max, gst.min); #endregion Console.ReadLine(); Console.Clear(); #region 查询操作符 Console.Title = "查询年龄在20岁以上和成绩在60分以下的学生"; //年龄在20以上 var stsAge = from st in linq.student where st.age > 20 select st; //成绩在60以下 var stsRes = from st in linq.student where st.result < 60 select st; //年龄在20以上 和 成绩在60以下的学生,自动过滤相同项 var stsUnion = stsAge.Union(stsRes).OrderBy(st => st.number); Console.WriteLine("年龄在20以上 和 成绩在60以下不含相同项的学生信息如下:"); foreach (var st in stsUnion) Console.WriteLine(st); Console.ReadLine(); Console.Clear(); //年龄在20以上 和 成绩在60以下的学生,不过滤相同项 var stsConcat = stsAge.Concat(stsRes).OrderBy(st => st.number); Console.WriteLine("年龄在20以上 和 成绩在60以下含相同项的学生信息如下:"); foreach (var st in stsConcat) Console.WriteLine(st); Console.ReadLine(); Console.Clear(); //年龄在20以上 且 成绩在60以下的学生 var stsIntersect = stsAge.Intersect(stsRes).OrderBy(st => st.number); Console.WriteLine("年龄在20以上 且 成绩在60以下的学生信息如下:"); foreach (var st in stsIntersect) Console.WriteLine(st); Console.ReadLine(); Console.Clear(); //年龄在20以上 且 成绩 不 在60以下的学生 var stsExcept = stsAge.Except(stsRes).OrderBy(st => st.number); Console.WriteLine("年龄在20以上 且 成绩 不 在60以下的学生信息如下:"); foreach (var st in stsExcept) Console.WriteLine(st); Console.ReadLine(); Console.Clear(); //查询并显示数据库第11到第15条学生信息 Console.Title = "查询数据库第11到第15条学生信息"; var stsSkip = (from st in linq.student select st).Skip(10).Take(5); Console.WriteLine("第11到第15条学生信息如下:"); foreach (var st in stsSkip) Console.WriteLine(st); #endregion Console.ReadLine(); Console.Clear(); #region 删除表记录 Console.Title = "从数据库中删除成绩不合格的学生信息"; //查询并显示成绩不合格的学生信息 var stsDel = from st in linq.student where st.result < 60 select st; Console.WriteLine("成绩不合格的学生信息如下:"); foreach (var st in stsDel) Console.WriteLine(st); linq.student.DeleteAllOnSubmit(stsDel);//从数据库中删除成绩不合格的学生信息 linq.SubmitChanges(); //保存修改 Console.ReadLine(); Console.Clear(); var stsAll = from st in linq.student select st; //查询并显示所有学生信息 Console.WriteLine("成绩合格的学生信息如下:"); foreach (var st in stsAll) Console.WriteLine(st); #endregion Console.ReadLine(); } catch (Exception) { throw; } }
partial void Updatestudent(student instance);
partial void Deletestudent(student instance);
partial void Insertstudent(student instance);