zoukankan      html  css  js  c++  java
  • Linq语句的使用

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using System.Data.Linq.SqlClient;
      7 
      8 namespace _15Linq
      9 {
     10     class Program
     11     {
     12         static void Main(string[] args)
     13         {
     14 
     15             //int a = 10;
     16             //var y = a < 10 ? a = 0 : ++a;
     17 
     18 
     19 
     20 
     21             //Console.WriteLine(y);
     22 
     23             //Console.Read();
     24 
     25             //新增学生
     26             List<Student> studentList = new List<Student>
     27             {
     28                 new Student {Sno="108",Sname="曾华",Ssex="",Sbirthday=DateTime.Parse("1977/09/01"),Class="95033" },
     29                 new Student {Sno="105",Sname="匡明",Ssex="",Sbirthday=DateTime.Parse("1916/10/2"),Class="95031" },
     30                 new Student {Sno="107",Sname="王丽",Ssex="",Sbirthday=DateTime.Parse("1976/1/23"),Class="95033" },
     31                 new Student {Sno="101",Sname="李军",Ssex="",Sbirthday=DateTime.Parse("1976/2/20"),Class="95033" },
     32                 new Student {Sno="109",Sname="王芳",Ssex="",Sbirthday=DateTime.Parse("1975/2/10"),Class="95031" },
     33                 new Student {Sno="103",Sname="陆君",Ssex="",Sbirthday=DateTime.Parse("1974/6/3"),Class="95031" }
     34             };
     35 
     36             //新增教师
     37             List<Teacher> teacherList = new List<Teacher>
     38             {
     39                 new Teacher {Tno="804",Tname="李诚",Tsex="",Tbirthday=DateTime.Parse("1958-12-02"),Prof="副教授",Depart="计算机系" },
     40                 new Teacher {Tno="856",Tname="张旭",Tsex="",Tbirthday=DateTime.Parse("1969-03-12"),Prof="讲师",Depart="电子工程系" },
     41                 new Teacher {Tno="825",Tname="王萍",Tsex="",Tbirthday=DateTime.Parse("1972-05-05"),Prof="助教",Depart="计算机系" },
     42                 new Teacher {Tno="831",Tname="刘冰",Tsex="",Tbirthday=DateTime.Parse("1977-08-14"),Prof="助教",Depart="电子工程系" },
     43             };
     44 
     45             //新增课程
     46             List<Course> courseList = new List<Course>
     47             {
     48                 new Course {Cno="3-105",Cname="计算机导论",Tno="825" },
     49                 new Course {Cno="3-245",Cname="操作系统",Tno="804" },
     50                 new Course {Cno="6-166",Cname="数字电路",Tno="856" },
     51                 new Course {Cno="9-888",Cname="高等数学",Tno="831" },
     52             };
     53 
     54             //新增成绩
     55             List<Score> scoreList = new List<Score>
     56             {
     57                 new Score {Sno="103",Cno="3-245",Degree=86 },
     58                 new Score {Sno="105",Cno="3-245",Degree=75 },
     59                 new Score {Sno="109",Cno="3-245",Degree=68 },
     60                 new Score {Sno="103",Cno="3-105",Degree=92 },
     61                 new Score {Sno="105",Cno="3-105",Degree=88 },
     62                 new Score {Sno="109",Cno="3-105",Degree=76 },
     63                 new Score {Sno="101",Cno="3-105",Degree=64 },
     64                 new Score {Sno="107",Cno="3-105",Degree=91 },
     65                 new Score {Sno="108",Cno="3-105",Degree=78 },   //变换
     66                 new Score {Sno="101",Cno="6-166",Degree=85 },
     67                 new Score {Sno="107",Cno="6-166",Degree=79 },
     68                 new Score {Sno="108",Cno="6-166",Degree=81 },
     69                 //new Score {Sno="108",Cno="3-105",Degree=92 }
     70             };
     71 
     72             Console.WriteLine("1.--------【查询全部列】查询Student表中的所有记录 --------");
     73             var student = from s in studentList
     74                           select s;
     75             Console.WriteLine(student);
     76             var query1 = from s in studentList
     77                          select s;
     78             foreach(var s in query1)
     79             {
     80                 Console.WriteLine("Sno:{0},Sname:{1},Ssex:{2},Class:{3}", s.Sno, s.Sname, s.Ssex, s.Class);
     81             }
     82 
     83 
     84             //匿名类型是C#3.0中新特性。其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。
     85             //匿名类型还依赖于另外一个特性:支持根据property来创建对象
     86             Console.WriteLine("");
     87             Console.WriteLine("2.--------【查询指定列】询Student表中的所有记录的Sname、Ssex和Class列--------");
     88 
     89             var query2 = from u in studentList
     90                          select new { u.Sname, u.Ssex, u.Class };
     91             foreach (var s in query2)
     92             {
     93                 Console.WriteLine("Sname:{0},Ssex:{1},Class:{2}",s.Sname, s.Ssex, s.Class);
     94             }
     95 
     96 
     97             //SqlMethods.DateDiffYear函数是属于命名空间System.Data.Linq.SqlClient,需要引用类库:System.Data.Linq;
     98             Console.WriteLine("");
     99             Console.WriteLine("3.--------【日期函数】查询Student表中的所有记录的Sname、Ssex和Class列和年龄(通过日期函数计算得到)--------");
    100             var query3 = from s in studentList
    101                          select new { s.Sname, s.Ssex, s.Class, Age = SqlMethods.DateDiffYear(s.Sbirthday, DateTime.Now) };
    102 
    103             foreach(var s in query3)
    104             {
    105                 Console.WriteLine("Sname:{0},Ssex:{1},Class:{2} Age:{3}", s.Sname, s.Ssex, s.Class,s.Age);
    106             }
    107 
    108 
    109             Console.WriteLine("");
    110             Console.WriteLine("4.--------【匿名类型中引入表达式】查询Student表中的所有记录的Sname、Ssex和Class列和年龄(通过日期函数计算得到),寿命状态(<80:短命,>=80:高寿)--------");
    111             var query4 = from s in studentList
    112                          select new { s.Sname, s.Ssex, s.Class, Age = SqlMethods.DateDiffYear(s.Sbirthday, DateTime.Now), lifetime = SqlMethods.DateDiffYear(s.Sbirthday, DateTime.Now) >= 80 ? "高寿" : "短命" };
    113 
    114             foreach (var s in query4)
    115             {
    116                 Console.WriteLine("Sname:{0},Ssex:{1},Class:{2} Age:{3} lifetime:{4}", s.Sname, s.Ssex, s.Class, s.Age,s.lifetime);
    117             }
    118 
    119             Console.WriteLine("");
    120             Console.WriteLine("5.--------【去掉重复项】查询教师所有的单位即不重复的Depart列--------");
    121 
    122             var query5 = (from s in teacherList
    123                           select s.Depart).Distinct();
    124 
    125             foreach(var s in query5)
    126             {
    127                 Console.WriteLine("Depart:{0}", s);
    128             }
    129 
    130 
    131             Console.WriteLine("");
    132             Console.WriteLine("6.--------【去掉重复项】查询教师所有的单位和职称(都相同的去掉)--------");
    133             var query6 = (from s in teacherList
    134                           select new { s.Depart, s.Prof }).Distinct();
    135             foreach (var s in query6)
    136             {
    137                 Console.WriteLine("Depart:{0} Prof:{1}", s.Depart,s.Prof);
    138             }
    139 
    140             Console.WriteLine("");
    141             Console.WriteLine("7.--------【条件查询-关系运算与逻辑运算】查询Score表中成绩在80到100之间的所有记录--------");
    142             var query7 = from s in scoreList
    143                          where s.Degree <= 100 && s.Degree >= 80
    144                          select s;
    145             foreach(var s in query7)
    146             {
    147                 Console.WriteLine("Sno:{0},Cno:{1},Degree:{2}", s.Sno, s.Cno, s.Degree);
    148             }
    149 
    150 
    151             Console.WriteLine("");
    152             Console.WriteLine("8.-------【模糊查询,字符串包含,以及字符串比较等于查询】 查询学生姓名包含王的学生信息");
    153             var query8 = from s in studentList
    154                          where s.Sname.Contains("")
    155                          select s;
    156             foreach (var s in query8)
    157             {
    158                 Console.WriteLine("Sno:{0},Sname:{1},Ssex:{2},Class:{3}", s.Sno, s.Sname, s.Ssex, s.Class);
    159             }
    160 
    161 
    162             Console.WriteLine("");
    163             Console.WriteLine("9.--------【条件查询-in查询】查询Score表中成绩为85,86或88的记录。--------");
    164             decimal[] arr = { 85,86,88};
    165 
    166             var query9 = from s in scoreList
    167                          where new decimal[] { 85, 86, 88 }.Contains(s.Degree)
    168                          select s;
    169             foreach (var s in query9)
    170             {
    171                 Console.WriteLine("Sno:{0},Cno:{1},Degree:{2}", s.Sno, s.Cno, s.Degree);
    172             }
    173 
    174             Console.WriteLine("");
    175             Console.WriteLine("10.--------【条件查询-或查询】查询student表中95031班或性别为女的同学记录--------");
    176             var query10 = from s in studentList
    177                           where s.Class.Equals("95031") || s.Ssex.Equals("")
    178                           select s;
    179             foreach (var s in query10)
    180             {
    181                 Console.WriteLine("Sno:{0},Sname:{1},Ssex:{2},Class:{3}", s.Sno, s.Sname, s.Ssex, s.Class);
    182             }
    183 
    184 
    185             Console.WriteLine("");
    186             Console.WriteLine("");
    187 
    188             Console.WriteLine("11.--------【排序】以Class降序descending查询Student表的所有记录--------");
    189 
    190             var query11 = from s in studentList
    191                           orderby s.Class descending
    192                           select s;
    193             foreach (var s in query11)
    194             {
    195                 Console.WriteLine("Sno:{0},Sname:{1},Ssex:{2},Class:{3}", s.Sno, s.Sname, s.Ssex, s.Class);
    196             }
    197 
    198             Console.WriteLine("");
    199             Console.WriteLine("");
    200             Console.WriteLine("12.--------【两个条件的排序】以Cno升序、Degree降序查询Score表的所有记录--------");
    201 
    202             var query12 = from s in scoreList
    203                           orderby s.Cno ascending, s.Degree descending
    204                           select s;
    205             foreach (var s in query12)
    206             {
    207                 Console.WriteLine("Sno:{0},Cno:{1},Degree:{2}", s.Sno, s.Cno, s.Degree);
    208             }
    209             
    210             Console.WriteLine("");
    211             Console.WriteLine("");
    212             Console.WriteLine("13.--------【聚合函数的应用】查询 95031 班的学生人数--------");
    213 
    214             var query13 = (from s in studentList
    215                            where s.Class.Equals("95031")
    216                            select s).Count();
    217 
    218             Console.WriteLine("95031 班的学生人数:{0}", query13);
    219             
    220             Console.WriteLine("");
    221             Console.WriteLine("14.--------【聚合函数】查询'3-105'号课程的平均分--------");
    222 
    223             var query14 = (from s in scoreList
    224                            where s.Cno.Equals("3-105")
    225                            select s.Degree).Average();
    226 
    227             Console.WriteLine("'3-105'号课程的平均分:{0}", query14);
    228 
    229 
    230             Console.WriteLine("");
    231             Console.WriteLine("15.--------【聚合函数】在学生表中求女生占总人数的百分比--------");
    232 
    233             var query15 = studentList.Count(x => x.Ssex.Equals(""))*1.0 / studentList.Count();
    234 
    235             Console.WriteLine("女生占总人数的百分比:{0}", query15.ToString("p2"));
    236 
    237             ///*
    238             //字符型转换 转为字符串  
    239             //12345.ToString("n"); //生成 12,345.00  
    240             //12345.ToString("C"); //生成 ¥12,345.00  
    241             //12345.ToString("e"); //生成 1.234500e+004  
    242             //12345.ToString("f4"); //生成 12345.0000  
    243             //12345.ToString("x"); //生成 3039 (16进制)  
    244             //12345.ToString("p"); //生成 1,234,500.00%  
    245             //*/
    246 
    247             Console.WriteLine("");
    248             Console.WriteLine("16.--------【连接查询,join】查询所有学生的Sname、Cno和Degree列--------");
    249 
    250             //方案一
    251             //var query16 = from s in studentList
    252             //              join sc in scoreList on s.Sno equals sc.Sno
    253             //              select new { s.Sname, sc.Cno, sc.Degree };
    254 
    255             //方案二
    256             var query16=from s in studentList
    257                          from sc in scoreList
    258                          where s.Sno == sc.Sno
    259                          select new { s.Sname, sc.Cno, sc.Degree };
    260 
    261 
    262             foreach(var s in query16)
    263             {
    264                 Console.WriteLine("Sname:{0}, Cno:{1}, Degree:{2}", s.Sname, s.Cno, s.Degree);
    265             }
    266 
    267             Console.WriteLine("");
    268             Console.WriteLine("17.--------【连接查询 where连接】查询所有学生的Sname、Cname和Degree列--------");
    269 
    270             var query17 = from s in studentList
    271                           from sc in scoreList
    272                           from c in courseList
    273                           where s.Sno == sc.Sno && sc.Cno == c.Cno
    274                           select new { s.Sname, c.Cname, sc.Degree };
    275 
    276             foreach(var s in query17)
    277             {
    278                 Console.WriteLine("Sname:{0}, Cname:{1}, Degree:{2}", s.Sname, s.Cname, s.Degree);
    279             }
    280             
    281 
    282             //let子句用于在LINQ表达式中存储子表达式的计算结果。let子句创建一个范围变量来存储结果,变量被创建后,
    283             //不能修改或把其他表达式的结果重新赋值给它。此范围变量可以在后续的LINQ子句中使用。
    284             Console.WriteLine("");
    285             Console.WriteLine("18.--------【聚合 函数的应用】查询Score表中的最高分的学生学号和课程号--------");
    286 
    287             var query18 = from s in scoreList
    288                           let scoreMax = (from u in scoreList
    289                                           select u.Degree).Max()
    290                           where s.Degree == scoreMax
    291                           select new { s.Sno, s.Cno };
    292             foreach(var s in query18)
    293             {
    294                 Console.WriteLine("sno:{0}  cno:{1}",s.Sno,s.Cno);
    295             }
    296                          
    297 
    298             ////在Linq表达式中,into子句可以创建一个临时标识符,使用该标识符可以存储group、join或select子句的结果。
    299             Console.WriteLine("");
    300             Console.WriteLine("19.-------【分组查询】-查询Score表中至少有5名学生选修的并以3开头的课程的平均分数--------");
    301             var query19=from s in scoreList
    302                         where s.Cno.StartsWith("3")
    303                         group s by s.Cno
    304                         into cc
    305                         where cc.Count()>=5
    306                         select new {cno=cc.Key,avg=cc.Average(x=>x.Degree)};
    307 
    308             foreach(var s in query19)
    309             {
    310                 Console.WriteLine("cno:{0}  avg:{1}",s.cno,s.avg);
    311             }            
    312 
    313             Console.WriteLine("");
    314             Console.WriteLine("20.--------【聚合函数的应用】查询最低分大于70,最高分小于90的Sno列--------");
    315             var query20 = from s in scoreList
    316                           group s by s.Sno
    317                               into cc
    318                               where cc.Min(x => x.Degree) >= 70 && cc.Max(x => x.Degree) <= 90
    319                               select new { Sno = cc.Key };
    320 
    321             foreach(var s in query20)
    322             {
    323                 Console.WriteLine("sno:{0}",s.Sno);
    324             }
    325 
    326             Console.WriteLine("21.---------统计总成绩大于170的学生");
    327             var query21 = from s in scoreList
    328                           group s by s.Sno
    329                               into cc
    330                               where cc.Sum(x => x.Degree) > 170
    331                               select new { sno = cc.Key };
    332 
    333             var query22 = from s in query21
    334                           from st in studentList
    335                           where s.sno == st.Sno
    336                           select new { st.Sno, st.Sname, st.Class, st.Ssex };
    337             foreach(var s in query22)
    338             {
    339                 Console.WriteLine("Sno:{0},Sname:{1},Class:{2},Ssex:{3}", s.Sno, s.Sname, s.Class, s.Ssex);
    340             }
    341 
    342 
    343             Console.Read();
    344         }
    345     }
    346 }
    View Code
  • 相关阅读:
    xss漏洞
    web日志分析(待)
    linux命令学习摘记
    浏览器的MIME映射(程序映射)
    文件上传靶场-Upload-Labs
    目录遍历用字典
    cmd、bat分割单行字符串
    iptables使用
    Spring AOP 学习(五)
    Spring 使用注解注入 学习(四)
  • 原文地址:https://www.cnblogs.com/zhaoben/p/13600914.html
Copyright © 2011-2022 走看看