/// <summary> /// 8.2 标准查询运算符 - Where 查询方法 /// </summary> static void SQOWhere() { List<C01Dog> list = GetDogList(); //在集合中 筛选出 青壮年 公狗们 List<C01Dog> listDog = list.Where(d => d.Gender == true && d.Age > 3 && d.Age < 39).ToList(); listDog.ForEach(d => Console.WriteLine(d.ToString())); } /// <summary> /// 8.3 标准查询运算符 - Select 投射方法(返回一个 新的集合) /// </summary> static void SQOSelect() { List<C01Dog> list = GetDogList(); List<C02SmallDog> listNew = list.Select(d => new C02SmallDog() { Name = d.Name }).ToList(); } /// <summary> /// 8.4 标准查询运算符 - Order 排序方法 /// </summary> static void SQOOrder() { List<C01Dog> list = GetDogList(); //8.4.1 升序排列 //List<C01Dog> listSorted = list.OrderBy(d => d.Age).ToList(); //8.4.2 降序排列 //List<C01Dog> listSorted = list.OrderByDescending(d => d.Age).ToList(); //8.4.3 多条件排序 //List<C01Dog> listSorted = list.OrderBy(d => d.Age).ThenBy(d => d.ID).ToList(); //8.4.4 多条件倒序 List<C01Dog> listSorted = list.OrderBy(d => d.Age).ThenByDescending(d => d.ID).ToList(); listSorted.ForEach(d => Console.WriteLine(d.ToString())); } /// <summary> /// 8.5 标准查询运算符 - Join 连接集合 /// </summary> static void TestJoin() { List<C01Dog> listDog = GetDogList(); List<C02DogToy> listToy = GetDogToyList(); //把 Dog集合 与 Toy集合 连接生成一个新的集合 //连接查询 on d.ID = t.DogID //返回的结果是一个 匿名类集合,程序员可以手动 的控制 返回集合里 使用 联合查询两个集合 里的 的哪些属性 var listJoined = listDog.Join(listToy, d => d.ID, t => t.DogID, (d, t) => new { DogId = d.ID, DogName = d.Name, ToyName = t.ToyName }).ToList(); listJoined.ForEach(a => Console.WriteLine(a.ToString())); } /// <summary> /// 8.6 标准查询运算符 - GroupBy 为集合元素分组 /// </summary> static void SQOGroupBy() { List<C01Dog> list = GetDogList(); //按照集合中 狗的 性别 分组 //IEnumerable<IGrouping<bool, C01Dog>> it = list.GroupBy(d => d.Gender); //按照集合中 狗的 姓名 分组 var it = list.GroupBy(d => d.Name); //将 小组迭代器 转成 小组 集合 IList<IGrouping<string, C01Dog>> listGroup = it.ToList(); //遍历 小组 foreach (IGrouping<string, C01Dog> group in listGroup) { //输出 小组 的 分组条件 Console.WriteLine("小组:" + group.Key); //遍历 小组里 所有的 元素 foreach (C01Dog item in group) { Console.WriteLine(item.ToString()); } Console.WriteLine("-----------------------------------------"); } } /// <summary> /// 8.7 标准查询运算符 - Skip + Take 分页数据 /// </summary> static void SQOPagedList() { List<C01Dog> list = GetDogList().OrderBy(d => d.ID).ToList(); //假设 每页 2行 //获取第一页 数据 //var pageOne = list.Skip(0).Take(2); var pageOne = GetPagedListByIndex(list, 1); Console.WriteLine("第一页 数据:"); pageOne.ForEach(i => Console.WriteLine(i.ToString())); //获取第二页 数据 //var pageTwo = list.Skip(2).Take(2); var pageTwo = GetPagedListByIndex(list, 2); Console.WriteLine("第二页 数据:"); pageTwo.ForEach(i => Console.WriteLine(i.ToString())); } static List<C01Dog> GetPagedListByIndex(List<C01Dog> list, int pageIndex) { int pageSize = 2; return list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); }