C#中的Linq技术标准操作符大全
2013年08月21日
⁄ 综合
⁄ 共 19344字 ⁄ 字号
小 中 大
- using System;
- using System.Collections.Generic;
- using System.Collections ;
- using System.Linq;
- using System.Text;
- namespace LINQ技术
- {
- class LINQ查询操作符
- {
- public static void Main()
- {
-
-
-
-
- IEnumerable<Person> list1 = GetMyList();
- var query1 = from p in list1 where p.age >= 20 select p;
- Console.WriteLine("-----------------过滤:大于等于20岁的人员-------------");
- PrintMyInfo(query1);
-
- Console.WriteLine("-----------------过滤:大于等于30岁的人员(对象版本)-------------");
- list1 = list1.Where<Person>(par => { return par.age >= 30; }).Select(par => par);
- PrintMyInfo(list1);
-
-
-
-
-
- IEnumerable<Person> list2 = GetMyList();
- list2 = list2.Where<Person>((p1, p2) => p1.name.StartsWith("a") && p2 <= 1);
- Console.WriteLine("-------------基于索引过滤:姓名以A开头,只要2名,多了不要-------------");
- PrintMyInfo(list2);
-
-
- object[] objs = new object[] { 232, 23, 3232, "aladdin", 332, 32323, "fuck" };
- var query2 = objs.OfType<string>();
- Console.WriteLine("-----------类型过滤,只要string型的元素---------");
- foreach (string s in query2)
- {
- Console.WriteLine(s);
- }
-
-
-
- IEnumerable<Person> list3 = GetMyList();
- Console.WriteLine("-----------复合子句,所年龄在25以上,并且拥有一输开奔驰的牛B人物---------");
- var quer3 = from p in list3 from c in p.list where c.name.Equals("奔驰") where p.age >= 25 select (p);
- PrintMyInfo(quer3);
-
-
-
-
-
-
-
- IEnumerable<Person> list4 = GetMyList();
- var query4 = list4.Select(p => p.age);
-
-
-
- Console.WriteLine("-----------按年纪投影---------");
- foreach (int p in query4)
- {
- Console.WriteLine(p);
- }
-
- var query5 = list4.Select(p =>
- {
- if (p.age >= 25)
- {
- return new Person(p.name, p.age);
- }
- else
- {
- return new Person("node", 1);
- }
- });
-
-
- Console.WriteLine("-----------select模拟 where ---------");
- foreach (Person p in query5)
- {
- Console.WriteLine(p.name);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- IEnumerable<Person> list5 = GetMyList();
-
- var query6 = list5.SelectMany(par => par.list).Where(p => p.name.Equals("奔驰"));
- Console.WriteLine("查询序列的序列-------------------");
- foreach (Cars car in query6)
- {
- Console.WriteLine(car.name);
- }
-
- var query7 = list5.SelectMany(cars => cars.list, (per, car) => new { Person = per, Cars = car }).Where(p => p.Person.age >= 25 && p.Cars.name.Equals("奔驰")).Select(par => par.Person.name);
- Console.WriteLine("对象方式复合查询-------------------");
- foreach (var a in query7)
- {
- Console.WriteLine(a);
- }
-
-
- var query8 = list5.Select(p => p).OrderBy(p => p.age).ThenBy(p => p.name);
- var query9 = list5.Select(p => p).OrderByDescending(p => p.age).Take(2);
- Console.WriteLine("------------升序所有人--------------");
- PrintMyInfo(query8);
- Console.WriteLine("降序所有人--------------------");
- PrintMyInfo(query9);
-
-
-
-
-
-
-
- var query10 = from per in list5
- group per by per.age into g
- orderby g.Count(), g.Key
- where g.Count() >= 2
- select new { Age = g.Key, Count = g.Count() };
- Console.WriteLine("--------分组查询-----------");
- foreach (var a in query10)
- {
- Console.WriteLine(a.Age + " " + a.Count);
- }
-
- var query11 = list5.GroupBy(per => per.age)
- .OrderBy(p => p.Count()).ThenBy(p => p.Key)
- .Where(p => p.Count() >= 2)
- .Select(p => new { Age = p.Key, Count = p.Count() });
- Console.WriteLine("--------分组查询,方法方式-----------");
- foreach (var a in query11)
- {
- Console.WriteLine(a.Age + " " + a.Count);
- }
-
-
- Console.WriteLine("---------嵌套对象分组-------------");
- var query12 = list5.GroupBy(per => per.age)
- .OrderBy(p => p.Count()).ThenBy(p => p.Key)
- .Where(p => p.Count() >= 2)
- .Select(p => new
- {
- Age = p.Key,
- Count = p.Count(),
- Persons = from per in p orderby per.name select per
- });
- foreach (var a in query12)
- {
- Console.WriteLine(a.Age + " " + a.Count);
- foreach (var b in a.Persons)
- {
- Console.WriteLine(b.name);
- }
- }
-
-
- var query13 = GetMyAnimalList().Select(animal => animal);
- var query14 = GetMyList().Select(person => person);
- var query15 = from per in query14
- join animal in query13 on per.age equals animal.age
- select new
- {
- DogName = animal.name,
- DogAge = animal.age,
- PersonName = per.name,
- PersonAge = per.age
- };
- foreach (var v in query15)
- {
- Console.WriteLine("人名:{0} , 年纪{1}------动物名:{2} ,年纪{3}", v.PersonName, v.PersonAge, v.DogName, v.DogAge);
- }
-
-
-
- IEnumerable<Animal> ani = GetMyAnimalList();
- IEnumerable<Person> pers = GetMyList();
- int i = 0;
- var query16 = (from a in ani select a.name).Concat(from p in pers select p.name);
- Console.WriteLine("--------------连接操作----------");
- foreach (var str in query16)
- {
- ++i;
- Console.WriteLine(str);
- }
- Console.WriteLine("个数:" + i);
-
-
- Console.WriteLine("--------------复合连接操作----------");
- var query17 = (from a in ani select new { Name = a.name, Age = a.age })
- .Concat(from p in pers select new { Name = p.name, Age = p.age });
- i = 0;
- foreach (var str in query17)
- {
- ++i;
- Console.WriteLine(str.Name + " " + str.Age);
- }
- Console.WriteLine("个数:" + i);
-
-
- var query18 = (from a in ani select a.name).Union(from p in pers select p.name);
- Console.WriteLine("--------------合并操作----------");
- i = 0;
- foreach (var str in query18)
- {
- Console.WriteLine(str);
- ++i;
- }
- Console.WriteLine("个数:" + i);
-
-
- IEnumerable<Animal> ani2 = GetMyAnimalList();
- IEnumerable<Person> pers2 = GetMyList();
- Console.WriteLine("--------------复合合并操作----------");
- var query19 = (from a in ani2 select new { Age = a.age, Name = a.name })
- .Union(from p in pers2 select new { Age = p.age, Name = p.name });
- i = 0;
- foreach (var str in query19)
- {
- ++i;
- Console.WriteLine(str.Age + " " + str.Name);
- }
- Console.WriteLine("个数:" + i);
-
-
-
-
- Console.WriteLine("--------------相交操作----------");
- var query20 = (from a in ani2 select new { Age = a.age, Name = a.name })
- .Intersect(from p in pers2 select new { Age = p.age, Name = p.name });
- i = 0;
- foreach (var str in query20)
- {
- ++i;
- Console.WriteLine(str.Age + " " + str.Name);
- }
- Console.WriteLine("个数:" + i);
-
-
-
-
- Console.WriteLine("--------------与非操作----------");
- var query21 = (from a in pers2 select new { Age = a.age, Name = a.name })
- .Except(from p in ani2 select new { Age = p.age, Name = p.name });
- i = 0;
- foreach (var str in query21)
- {
- ++i;
- Console.WriteLine(str.Age + " " + str.Name);
- }
- Console.WriteLine("个数:" + i);
-
-
-
-
- int pageSize = 2;
-
- int numberPages = (int)Math.Ceiling(GetMyList().Count() / (double)pageSize);
- for (int page = 0; page < numberPages; page++)
- {
- Console.WriteLine("-------------------第{0}页-------------------------------", page);
- var persons = ( from r in GetMyList() select r.name ).Skip( page * pageSize ).Take( pageSize ) ;
- foreach( var a in persons )
- {
- Console.WriteLine( a ) ;
- }
- }
-
-
-
- var query22 = from person in GetMyList() where person.list.Count() >= 2 select new { Name = person.name , Age = person.age , Count = person.list.Count() } ;
- Console.WriteLine( "-----------------------选出拥有车俩3俩以上的人------------" ) ;
-
- foreach( var a in query22 )
- {
- Console.WriteLine( a.Name + " " + a.Age + " " + a.Count ) ;
- }
-
-
- Console.WriteLine( "-------------------------所有人年纪的总合------------------" ) ;
- var query23 = from ppp in GetMyList()
- group ppp by ppp.name into g
- select new
- {
- Name = g.Key,
- AgeSum = (from p in pers select p.age).Sum(),
- Count = g.Count()
- };
- foreach (var a in query23)
- {
- Console.WriteLine(a.Name + " " + a.AgeSum + " " + a.Count );
- }
-
-
-
-
- List<Person> list = (from p in GetMyList() select p).ToList();
- Console.WriteLine("立即执行查询-----------------------");
- foreach (var a in list)
- {
- Console.WriteLine(a.age + a.name ) ;
- foreach( var p in a.list )
- {
- Console.WriteLine( p.name ) ;
- }
- }
-
- ILookup<string, Person> per111 = (from per in GetMyList()
- from c in per.list
- select new
- {
- Car = c.name,
- Person = per
- }).ToLookup(p => p.Car, p => p.Person);
- Console.WriteLine( per111.Count ) ;
- if ( per111.Contains("奔驰") )
- {
- foreach( var p in per111["奔驰"] )
- {
- Console.WriteLine( "有这个车的人:{0}" , p.name ) ;
- }
- }
-
- ArrayList arr = new ArrayList( GetMyList() as ICollection ) ;
- var qqq = from a in arr.Cast<Person>() where a.name == "aladdin" select a ;
-
-
-
-
- var values = Enumerable.Range( 1 ,20 ).Select( n => n*3 ) ;
- foreach( var a in values )
- {
- Console.Write( a + " " ) ;
- }
-
-
- var em = Enumerable.Empty<int>() ;
- var pep = Enumerable.Repeat( "fuck " , 10 ) ;
- foreach( var a in pep )
- {
- Console.WriteLine( a ) ;
- }
-
- Console.ReadLine();
- }
- public static void PrintMyInfo(IEnumerable<Person> en)
- {
- foreach (Person per in en)
- {
- Console.WriteLine("姓名:{0} 年龄:{1}", per.name, per.age);
- }
- }
- public static IEnumerable<Animal> GetMyAnimalList()
- {
- List<Animal> lists = new List<Animal>();
- Animal p1 = new Animal("aladdin", 21);
- Animal p2 = new Animal("apple", 22);
- Animal p3 = new Animal("angel", 30);
- Animal p4 = new Animal("jacky", 22);
- lists.Add(p1);
- lists.Add(p2);
- lists.Add(p3);
- lists.Add(p4);
- return lists;
- }
- public static IEnumerable<Person> GetMyList()
- {
- List<Person> lists = new List<Person>();
- Person p1 = new Person("aladdin", 21);
- Person p2 = new Person("apple", 22);
- Person p3 = new Person("angel", 30);
- Person p4 = new Person("jacky", 20);
- Person p5 = new Person("zhao", 11);
- Person p6 = new Person("fuck", 33);
- Person p7 = new Person("emep", 25);
- Person p8 = new Person("xiaoming", 88);
- Person p9 = new Person("along", 88);
- Person p10 = new Person("dafei", 99);
- Person p11 = new Person("bige", 99);
- Person p12 = new Person("feitianlong", 77);
- Person p13 = new Person("dalianmao", 77);
- Person p14 = new Person("guixianren", 21);
- Person p15 = new Person("yuebuqun", 21);
- p1.list.Add(new Cars("奔驰"));
- p1.list.Add(new Cars("宝马"));
- p1.list.Add(new Cars("拖拉机"));
- p2.list.Add(new Cars("自行车"));
- p2.list.Add(new Cars("摩托"));
- p3.list.Add(new Cars("奔驰"));
- p3.list.Add(new Cars("陆虎"));
- p4.list.Add(new Cars("捷达"));
- p4.list.Add(new Cars("哈飞"));
- p5.list.Add(new Cars("奔驰"));
- p5.list.Add(new Cars("宝时捷"));
- p6.list.Add(new Cars("奔驰"));
- p6.list.Add(new Cars("霸道"));
- p7.list.Add(new Cars("昌河"));
- p7.list.Add(new Cars("长安之星"));
- lists.Add(p1);
- lists.Add(p2);
- lists.Add(p3);
- lists.Add(p4);
- lists.Add(p5);
- lists.Add(p6);
- lists.Add(p7);
- lists.Add(p8);
- lists.Add(p9);
- lists.Add(p10);
- lists.Add(p11);
- lists.Add(p12);
- lists.Add(p13);
- lists.Add(p14);
- lists.Add(p15);
- return lists;
- }
- }
- class Person
- {
- public string name;
- public int age;
- public List<Cars> list = new List<Cars>();
- public Person(string name, int age)
- {
- this.name = name;
- this.age = age;
- }
- }
- class Cars
- {
- public string name;
- public Cars(string name)
- {
- this.name = name;
- }
- }
- class Animal
- {
- public string name;
- public int age;
- public Animal(string name, int age)
- {
- this.name = name;
- this.age = age;
- }
- }
- }