栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Linq学习总结2

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linq学习总结2

linq常用扩展方法

定义一个员工信息类

    class Employee
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public bool Gender { get; set; }
        public int Salary { get; set; }
        public override string ToString()
        {
            return $"id={Id},name={Name},age={Age},gender={Gender},salary={Salary}";
        }
    }

api方法调用:获取数据个数

        static void Main(string[] args)
        {
            List list = new List();
            list.Add(new Employee { Id = 1, Name = "zhangsan", Age = 15, Gender = false, Salary = 5000 });
            list.Add(new Employee { Id = 2, Name = "lisi", Age = 50, Gender = true, Salary = 8000 });
            list.Add(new Employee { Id = 3, Name = "wangwu", Age = 30, Gender = false, Salary = 1000 });
            list.Add(new Employee { Id = 4, Name = "zhaoliu", Age = 20, Gender = true, Salary = 3000 });
            list.Add(new Employee { Id = 5, Name = "mazi", Age = 25, Gender = false, Salary = 2000 });

            IEnumerable newList = list.Where(e => e.Age > 20);
            foreach (Employee item in newList)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine(list.Count());//返回所有记录条数
            Console.WriteLine(list.Count(e => e.Age > 30));//返回满足条件的记录条数
            Console.WriteLine(list.Any(e => e.Salary > 3000));//判断是否存在满足条件的记录 存在返回true,否则返回false

            Console.Read();
        }

执行结果:

where方法:每一项数据都会经过predicate的测试,如果针对每一个元素,predicate执行的返回值为true,那么这个元素就会放到返回值中。

where参数是一个lambda表达式格式的匿名方法,方法的参数e代表当前判断的元素对象。参数的名字不一定非要叫e,不过一般lambda表达式中的变量名长度都不长。

count()方法:获取数据条数。

any()方法:是否至少有一条数据满足条件。

api方法调用:获取一条数据(两种写法)

        static void Main(string[] args)
        {
            List list = new List();
            list.Add(new Employee { Id = 1, Name = "zhangsan", Age = 15, Gender = false, Salary = 5000 });
            list.Add(new Employee { Id = 2, Name = "lisi", Age = 50, Gender = true, Salary = 8000 });
            list.Add(new Employee { Id = 3, Name = "wangwu", Age = 30, Gender = false, Salary = 1000 });
            list.Add(new Employee { Id = 4, Name = "zhaoliu", Age = 20, Gender = true, Salary = 3000 });
            list.Add(new Employee { Id = 5, Name = "mazi", Age = 25, Gender = false, Salary = 2000 });

         
            //Employee e1 = list.Single();//会报错,因为list中有多条记录;如果一条记录都没有也会报错
            Employee e2 = list.Where(e => e.Name == "zhangsan").Single();
            Employee e3 = list.Single(e => e.Name == "zhangsan");
            Console.WriteLine(e2);
            Console.WriteLine(e3);

            Employee e4 = list.SingleOrDefault(e => e.Name == "zhangsan1111");
            Console.WriteLine(e4==null);//true

            //Employee e5 = list.First(e => e.Name == "zhangsan1111");//会报错,因为没有匹配到任何一条;如果有多条则默认为第一条
            //Console.WriteLine(e5);

            Employee e6 = list.FirstOrDefault(e => e.Name == "zhangsan1111");
            Console.WriteLine(e6==null);//true

            Console.Read();
        }

执行结果:

 

Single()方法:有且只有一条满足要求的数据,如果没有或者超过一条都会报异常。

SingleOrDefault()方法:最多只有一条满足要求的数据,如果没有就返回null,如果超过一条就会报异常。

First()方法:返回第一条。如果一条都没有,会报异常;如果有多条则返回第一条。

FirstOrDefault()方法:返回第一条或默认值。如果一条都没有返回默认值,如果有多条返回第一条。

选择合适的方法,起到“防御性编程”的目的。比如说只需要查询一条记录,那就可以使用上面的方法进行查询,尽管结果集中没有记录可能会引发异常。但是及早将问题暴露出来是一个好的事情,防止在后面更为重要的环节当中出错。

api方法调用:排序

        static void Main(string[] args)
        {
            List list = new List();
            list.Add(new Employee { Id = 1, Name = "zhangsan", Age = 15, Gender = false, Salary = 5000 });
            list.Add(new Employee { Id = 2, Name = "lisi", Age = 50, Gender = true, Salary = 8000 });
            list.Add(new Employee { Id = 3, Name = "wangwu", Age = 30, Gender = false, Salary = 1000 });
            list.Add(new Employee { Id = 4, Name = "zhaoliu", Age = 20, Gender = true, Salary = 3000 });
            list.Add(new Employee { Id = 5, Name = "mazi", Age = 25, Gender = false, Salary = 2000 });

            //根据age正序
            IEnumerable listOrder = list.OrderBy(e => e.Age);
            foreach (var item in listOrder)
            {
                Console.WriteLine(item);
            }


            //根据Salary倒序
            IEnumerable listSalary = list.OrderByDescending(e => e.Salary);
            foreach (var item in listSalary)
            {
                Console.WriteLine(item);
            }


            Console.Read();
        }

执行结果:

 

 OrderBy()方法:对数据正序排序。

OrderByDescending()方法:对数据倒序排序。

api方法调用:限制结果集,获取部分数据

        static void Main(string[] args)
        {
            List list = new List();
            list.Add(new Employee { Id = 1, Name = "zhangsan", Age = 15, Gender = false, Salary = 5000 });
            list.Add(new Employee { Id = 2, Name = "lisi", Age = 50, Gender = true, Salary = 8000 });
            list.Add(new Employee { Id = 3, Name = "wangwu", Age = 30, Gender = false, Salary = 1000 });
            list.Add(new Employee { Id = 4, Name = "zhaoliu", Age = 20, Gender = true, Salary = 3000 });
            list.Add(new Employee { Id = 5, Name = "mazi", Age = 25, Gender = false, Salary = 2000 });

            IEnumerable listSkip = list.Skip(2).Take(3);
            foreach (var item in listSkip)
            {
                Console.WriteLine(item);
            }


            Console.Read();
        }

执行结果:

Skip(n)方法:跳过n条数据。

Take(n)方法:获取n条数据。

Skip(n)、Take(n)也可以单独使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号