Linq基础之常用关键字

Linq在查询时非常方便,下面分享一下我在项目开发常用的几个关键字。为了演示,新建了3个类(Student,Course,Score),分别是学生信息表,课程信息表,成绩信息表。

 /// <summary>
    /// 学生信息表
    /// </summary>
    class Student
    {
        public int stuId { get; set; }//学生主键

        public string stuNumber { get; set; }//学号

        public string stuName { get; set; }//姓名

        public int stuAge { get; set; }//年龄

    }

    /// <summary>
    /// 课程信息表
    /// </summary>
    class Course
    {
        public int couId { get; set; }//课程主键

        public string couName { get; set; }//课程名称
    }

    /// <summary>
    /// 成绩信息表
    /// </summary>
    class Score
    {
        public int scoId { get; set; }//成绩主键

        public int stuId { get; set; }//学生主键

        public int couId { get; set; }//课程主键

        public int scoMark { get; set; }//分数
    }
Linq常用语法:

  static void Main(string[] args)
        {
            #region
            IList<Student> studentList = new List<Student>() {
                new Student() { stuId=1, stuNumber="201420214601", stuName="张三", stuAge=19 },
                new Student(){ stuId=2, stuNumber="201420214602", stuName="李四", stuAge=20 },
                 new Student() { stuId=3, stuNumber="201420214603", stuName="王五", stuAge=19 }
            };
            IList<Course> courseList = new List<Course>() {
               new Course() { couId=1, couName="数学" }
            };
            IList<Score> scoreList = new List<Score>() {
                 new Score() { scoId=1, stuId=1, couId=1, scoMark=55 },
                 new Score() {  scoId=2, stuId=2, couId=1, scoMark=77},
            };
            #endregion

            #region  where ,select
            var query1 = from stu in studentList
                         where stu.stuAge == 19
                         select new //返回匿名对象
                         {
                             stuNumber = stu.stuNumber,
                             stuName = stu.stuName
                         };
            Console.WriteLine("---------------------------------query1------------------------------");
            foreach (var q in query1)
            {
                Console.WriteLine(string.Format("学号:{0},姓名:{1}", q.stuNumber, q.stuName));
            }
            #endregion

            #region  join
            var query2 = from sco in scoreList
                         join stu in studentList
                         on sco.stuId equals stu.stuId
                         join cou in courseList
                         on sco.couId equals cou.couId
                         select new
                         {
                             stu.stuName,
                             cou.couName,
                             sco.scoMark
                         };
            Console.WriteLine("---------------------------------query2------------------------------");
            foreach (var q in query2)
            {
                Console.WriteLine(string.Format("姓名:{0},课程:{1},分数:{2}", q.stuName, q.couName, q.scoMark));
            }
            #endregion

            #region case
            var query3 = from sco in scoreList
                         join stu in studentList
                         on sco.stuId equals stu.stuId
                         join cou in courseList
                         on sco.couId equals cou.couId
                         select new
                         {
                             stu.stuName,
                             cou.couName,
                             scoMark = sco.scoMark >= 60 ? "及格" : "不及格"
                         };
            Console.WriteLine("---------------------------------query3------------------------------");
            foreach (var q in query3)
            {
                Console.WriteLine(string.Format("姓名:{0},课程:{1},分数:{2}", q.stuName, q.couName, q.scoMark));
            }
            #endregion

            #region  left join
            var query4 = from stu in studentList
                         join sco in scoreList
                         on stu.stuId equals sco.stuId into temp
                         from tt in temp.DefaultIfEmpty()
                         select new
                         {
                             stu.stuName,
                             scoMark = tt == null ? "无" : tt.scoMark.ToString()
                         };
            Console.WriteLine("---------------------------------query4------------------------------");
            foreach (var q in query4)
            {
                Console.WriteLine(string.Format("姓名:{0},分数:{1}", q.stuName, q.scoMark));
            }
            #endregion

            #region let
            var query5 = from sco in scoreList
                         join stu in studentList
                         on sco.stuId equals stu.stuId
                         join cou in courseList
                         on sco.couId equals cou.couId
                         let passMark = "[" + sco.scoMark + "]" + (sco.scoMark >= 60 ? "及格" : "不及格")
                         select new
                         {
                             stu.stuName,
                             cou.couName,
                             passMark
                         };
            Console.WriteLine("---------------------------------query5------------------------------");
            foreach (var q in query5)
            {
                Console.WriteLine(string.Format("姓名:{0},课程:{1},分数:{2}", q.stuName, q.couName, q.passMark));
            }
            #endregion

            #region  order by 
            var query6 = from stu in studentList
                             //orderby stu.stuAge ascending //升序
                         orderby stu.stuAge descending //降序
                         select new //返回匿名对象
                         {
                             stu.stuNumber,
                             stu.stuName,
                             stu.stuAge
                         };
            Console.WriteLine("---------------------------------query6------------------------------");
            foreach (var q in query6)
            {
                Console.WriteLine(string.Format("学号:{0},姓名:{1},年龄:{2}", q.stuNumber, q.stuName, q.stuAge));
            }
            #endregion

            #region  distinct
            var query7 = (from stu in studentList
                          orderby stu.stuAge descending
                          select new //返回匿名对象
                          {
                              stu.stuAge
                          }).Distinct();
            Console.WriteLine("---------------------------------query7------------------------------");
            foreach (var q in query7)
            {
                Console.WriteLine(string.Format("年龄分布:{0}", q.stuAge));
            }
            #endregion

            #region  top 1
            var query8 = (from stu in studentList
                          where stu.stuAge == 19
                          select new //返回匿名对象
                          {
                              stu.stuNumber,
                              stu.stuName,
                              stu.stuAge
                          }).FirstOrDefault();
            Console.WriteLine("---------------------------------query8------------------------------");
            if (query8 != null)
            {
                Console.WriteLine(string.Format("学号:{0},姓名:{1},年龄:{2}",
              query8.stuNumber, query8.stuName, query8.stuAge));
            }
            #endregion

            Console.ReadKey();
        }
输出结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值