标准查询运算符定义在 System.Linq.Enumerable 类的 50 多个为 IEnumerable<T> 准备的扩展方法,换句话说,IEnumerable<T> 上的每一个方法都是一个标准查询运算符,这些方法用来对操作的集合进行查询筛选。
标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询功能。
实例如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { public static List<User> InitListData() { return new List<User>(){ new User { Id = 1, Name = "凌霜残雪1", Age = 21 }, new User { Id = 2, Name = "凌霜残雪2", Age = 22 }, new User { Id = 3, Name = "凌霜残雪3", Age = 23 }, new User { Id = 4, Name = "凌霜残雪4", Age = 24 }, new User { Id = 5, Name = "凌霜残雪5", Age = 25 }, new User { Id = 6, Name = "凌霜残雪6", Age = 26 }, new User { Id = 7, Name = "凌霜残雪7", Age = 27 }, new User { Id = 8, Name = "凌霜残雪8", Age = 28 }, new User { Id = 9, Name = "凌霜残雪", Age = 29 }, new User { Id = 10, Name = "凌霜残雪10", Age = 36 }, new User { Id = 11, Name = "凌霜残雪11", Age = 33 } }; } static void Main(string[] args) { var list = InitListData(); //var result = list.Where(x => x.Age >= 30).ToList(); //result.ForEach(r => Console.WriteLine(string.Format("{0},{1},{2}", r.Id, r.Name, r.Age))); var result = list.Where(x => x.Age >= 30).Select(s => s.Name).ToList(); result.ForEach(x => Console.WriteLine(x)); Console.ReadLine(); } } class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } }
筛选集合 Where
Where 方法为我们提供了一个集合的筛选功能,但需要一个带 bool 返回值的“筛选器”(匿名方法、委托、Lambda表达式均可),从而表明集合中某个元素是否应该被返回。
var list = InitListData(); var result = list.Where(x => x.Age >= 30).ToList(); result.Foreach(r=>Console.WriteLine(string.Format("{0},{1},{2}", r.Id, r.Name, r.Age))) Console.ReadLine();
运行结果:
查询投射 Select:
返回对象集合 IEnumerable<T>Select()。返回年龄大于30 岁的人的名字代码如下:
var result = list.Where(x => x.Age >= 30).Select(s => s.Name).ToList(); result.ForEach(x => Console.WriteLine(x));
运行结果如下:
统计数量 int Count()
int num = list.Where(x => x.Age >= 30).Count();
结果为 2.
多条件排序:OrderBy().ThenBy().ThenBy()
list.OrderBy(x=>x.Age).OrderBy(x=>x.Id)
集合连接 Join()
新建一个 Student 类,并初始化数据。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { public static List<User> InitListData() { return new List<User>(){ new User { Id = 1, Name = "凌霜残雪1", Age = 21 }, new User { Id = 2, Name = "凌霜残雪2", Age = 22 }, new User { Id = 3, Name = "凌霜残雪3", Age = 23 }, new User { Id = 4, Name = "凌霜残雪4", Age = 24 }, new User { Id = 5, Name = "凌霜残雪5", Age = 25 }, new User { Id = 6, Name = "凌霜残雪6", Age = 26 }, new User { Id = 7, Name = "凌霜残雪7", Age = 27 }, new User { Id = 8, Name = "凌霜残雪8", Age = 28 }, new User { Id = 9, Name = "凌霜残雪", Age = 29 }, new User { Id = 10, Name = "凌霜残雪10", Age = 36 }, new User { Id = 11, Name = "凌霜残雪11", Age = 33 } }; } static void Main(string[] args) { List<Student> lstStu = new List<Student>(){ new Student { Id = 1, userID = 1, ClassName = "一班" }, new Student { Id = 2, userID = 2, ClassName = "一班" }, new Student { Id = 3, userID = 3, ClassName = "一班" }, new Student { Id = 4, userID = 4, ClassName = "一班" }, new Student { Id = 5, userID = 5, ClassName = "一班" }, new Student { Id = 6, userID = 6, ClassName = "一班" }, new Student { Id = 7, userID = 7, ClassName = "一班" }, new Student { Id = 8, userID = 8, ClassName = "一班" }, new Student { Id = 9, userID = 9, ClassName = "一班" }, new Student { Id = 10, userID = 10, ClassName = "一班" }, new Student { Id = 11, userID = 11, ClassName = "一班" } }; var list = InitListData(); //var result = list.Where(x => x.Age >= 30).ToList(); //result.ForEach(r => Console.WriteLine(string.Format("{0},{1},{2}", r.Id, r.Name, r.Age))); //var result = list.Where(x => x.Age >= 30).Select(s => s.Name).ToList(); //result.ForEach(x => Console.WriteLine(x)); int num = list.Where(x => x.Age >= 30).Count(); var result1 = list.Join(lstStu, u => u.Id, p => p.userID, (u, p) => new { userID = u.Id, Name = u.Name, ClassName = p.ClassName }); foreach (var item in result1) { Console.WriteLine(item); } Console.WriteLine(num); Console.ReadLine(); } } class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Student { public int Id { get; set; } public int userID { get; set; } public string ClassName { get; set; } } }
运行结果如下: