Linq 2 Linq方法where和select

自定义学生类

    public class Student
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int ClassId { get; set; }

        public int Age { get; set; }
    }

初始化数据

List<Student> students = new List<Student>() {
            new Student(){
                Id=1,
                Name="张三",
                ClassId=101,
                Age=14
            },
            new Student(){
                Id=2,
                Name="李四",
                ClassId=101,
                Age=15
            },
            new Student(){
                Id=3,
                Name="王五",
                ClassId=102,
                Age=14
            },
            new Student(){
                Id=4,
                Name="赵六",
                ClassId=103,
                Age=13
            },
            };

现在要查询classId=102的学生信息,以前不知道linq的时候,有人会循环去判断,但现在我们都会用官方的linq方法

            //查询班级id为102的学生信息
            var stuList = students.Where(a => a.ClassId == 102);

Where里面是lambda表达式,我们经常用,Where方法我们点进去看,就是一个扩展方法,传递一个泛型,定义一个委托,这下就好理解多了。

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

如果不想用官方的Linq方法,也可以用表达式方法。

            stuList = (from s in students
                      where s.ClassId == 102
                      select s).ToList();

这种更像sql,如果不toList的话必须用var 变量 来接受,这也说明,表达式和官方的linq方法是可以混用的,但是一般来说,能用官方的linq方法,就用官方的。

 

Select投影方法,通常我们是用来转换,把一个类中需要的部分提取出来放到另一个类中,这样输出的内容会更少更精确。

创建一个StudentModel类,用于输出

    public class StudentModel
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }
            //只要14岁的学生姓名和年纪
            List<StudentModel> sm = students.Select(s => new StudentModel
            {
                Name = s.Name,
                Age = s.Age
            }).Where(s => s.Age == 14).ToList();

这样新的集合就赋值完成了,用表达式的话就等同于

            sm = (from s in students
                  where s.Age == 14
                  select new StudentModel { Name = s.Name, Age = s.Age }).ToList();

 

posted @ 2021-03-30 16:02  luytest  阅读(157)  评论(0编辑  收藏  举报