避免在LINQ中使用不必要的查询

在LINQ查询中,避免不必要的迭代

MyList:

复制代码
 class MyList : IEnumerable<Person>
    {
        List<Person> listPerson = new List<Person>()
        {
            new Person(){Name = "Mike",Age = 23},
            new Person(){Name = "Mike",Age = 13},
            new Person(){Name = "Lucyee",Age = 53},
            new Person(){Name = "Uyiasdn",Age = 63},
            new Person(){Name = "Oiasdn",Age = 26},
            new Person(){Name = "Poundhby",Age = 43}
        };

        /// <summary>
        /// 迭代次数属性
        /// </summary>
        public int IteratedNum { get; set; }

        public Person this[int i]
        {
            get { return listPerson[i]; }
            set { this.listPerson[i] = value; }
        }



        public IEnumerator<Person> GetEnumerator()
        {
            foreach(var item in listPerson)
            {
                IteratedNum++;
                yield return item;
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
复制代码

主程序:

复制代码
            Console.WriteLine("Hello World!");
            MyList list = new MyList();
            var temp1 = (from a in list where a.Age == 13 select a).ToList(); // 查询满足条件的所有数据
            Console.WriteLine(list.IteratedNum.ToString()); // 输出6
            Console.WriteLine();

            list.IteratedNum = 0;
            var temp2 = (from a in list where a.Age >= 10 select a).First(); // 查询满足条件的第一个数据
            Console.WriteLine(list.IteratedNum.ToString()); // 输出1
            Console.WriteLine();

            list.IteratedNum = 0;
            var temp3 = (from a in list select a).Take(2).ToList();
            Console.WriteLine(list.IteratedNum.ToString()); // 输出2
            Console.WriteLine();

            list.IteratedNum = 0;
            var temp4 = (from a in list where a.Name == "Mike" select a).ToList();
            Console.WriteLine(list.IteratedNum.ToString()); // 输出6
复制代码

在这里,我认为的是First()和Take()只是做了对应的处理,只拿出这么点数据。不需要对后面的集合进行遍历,因为First语句的意思就是拿第一条数据,Take的意思就是拿多少条数据。并不会对后面进行遍历。

在这里不能看出与where的对比,因为where本身就要访问所有数据且拿出满足条件的。

posted @   Wen_Chen  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示