LINQ查询集合与线程间的操作

复制代码
List<Person> personList01 = new List<Person>()
            {
                new Person(){Name = "1",CompanyID = 1},
                new Person(){Name = "2",CompanyID = 1 },
                new Person(){Name = "3",CompanyID = 2 },
                new Person(){Name = "4",CompanyID = 2 },
                new Person(){Name = "5",CompanyID = 1 },
                new Person(){Name = "6",CompanyID = 2 },
                new Person(){Name = "7",CompanyID = 2 },
                new Person(){Name = "8",CompanyID = 1 },
                new Person(){Name = "9",CompanyID = 2 },
                new Person(){Name = "10",CompanyID = 1 },
                new Person(){Name = "11",CompanyID = 2 }
            };

            List<Company> companyList01 = new List<Company>()
            {
                new Company(){Name = "Sunwada",Id = 1},
                new Company(){Name = "Junykist",Id =2}
            };
            Thread thread01 = new Thread(() =>
            {
                foreach (var a in personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" }))
                {
                    Console.WriteLine(string.Format("{0} ,{1}", a.PersonName, a.PersonCompany));
                    Thread.Sleep(1000);
                }
            });
            thread01.Start();
            Thread thread02 = new Thread(() =>
            {
                for (int i = 0; i < 3; i++)
                {
                    Console.WriteLine("删除的:" + personList01[i].Name);
                    Thread.Sleep(1000);
                    personList01.RemoveAt(1);
                }
            });
            thread02.Start();
复制代码

 这里,LINQ似乎每次都要查询一边集合中的数据

LINQ中的元素与之前的元素相比:是深拷贝

 

复制代码
var list = personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" });
            Console.WriteLine("personList01 LINQ后的list: ");
            foreach (var a in list)
            {
                Console.WriteLine(a.PersonName + ".clone");
            }
            Console.WriteLine("原personList01: ");
            foreach (var a in personList01)
            {
                Console.WriteLine(a.Name);
            }
复制代码
复制代码
Console.WriteLine();
            Console.WriteLine("LINQ查询与集合线程间的操作:");
            List<Person> personList01 = new List<Person>()
            {
                new Person(){Name = "1",CompanyID = 1},
                new Person(){Name = "2",CompanyID = 1 },
                new Person(){Name = "3",CompanyID = 2 },
                new Person(){Name = "4",CompanyID = 2 },
                new Person(){Name = "5",CompanyID = 1 },
                new Person(){Name = "6",CompanyID = 2 },
                new Person(){Name = "7",CompanyID = 2 },
                new Person(){Name = "8",CompanyID = 1 },
                new Person(){Name = "9",CompanyID = 2 },
                new Person(){Name = "10",CompanyID = 1 },
                new Person(){Name = "11",CompanyID = 2 }
            };

            List<Company> companyList01 = new List<Company>()
            {
                new Company(){Name = "Sunwada",Id = 1},
                new Company(){Name = "Junykist",Id =2}
            };
            var list = personList01.Select(person => new { PersonName = person.Name, PersonCompany = person.CompanyID == 1 ? "Sunwada" : "Junykist" }).ToList();
            #region
            Console.WriteLine("personList01 LINQ后的list: ");
            for (int i = 0; i < list.Count(); i++)
            {
                Console.Write(list[i].GetHashCode() + " ");
                //Console.WriteLine(a.PersonName);
                Console.Write(list[i].GetHashCode() + " ");
            }
            Console.WriteLine("原personList01: ");
            for (int i = 0; i < personList01.Count(); i++)
            {
                Console.Write(personList01[i].GetHashCode() + " ");
                //Console.WriteLine(a.Name);
                Console.Write(personList01[i].GetHashCode() + " ");
            }
            #endregion
            //Thread thread01 = new Thread(() =>
            //{
            //    foreach (var a in list)
            //    {
            //        Console.WriteLine(string.Format("{0} ,{1}", a.PersonName, a.PersonCompany));
            //        Thread.Sleep(1000);
            //    }
            //});
            //thread01.Start();

            //Thread thread02 = new Thread(() =>
            //{
            //    for (int i = 0; i < 3; i++)
            //    {
            //        Console.WriteLine("删除的:" + personList01[i].Name);
            //        Thread.Sleep(1000);
            //        personList01.RemoveAt(1);
            //    }
            //});
            //thread02.Start();
复制代码

**:LINQ与foreach。foreach里面有语法糖,封装了LINQ的语句并且拿到了执行结果的集合。所以foreach在每次遍历的时候不需要执行LINQ语句,只需遍历LINQ的执行结果集合。

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