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的执行结果集合。
浙公网安备 33010602011771号