#region SQO (标准查询运算符) 方法 #region Where() Find() FindAll() FirstOrDefault()等方法 static void c01where() { var list = GetPigList(); //1.0 获取当前list集合中的符合条件的第一条数据 list.Sort((p, n) => p.Age - n.Age); var pig = list.FirstOrDefault(p => p.Age > 2); // pig.Say(); //2.0 first 获取当前list集合中的符合条件的第一条数据,如果没有找到则抛出异常 var pig1 = list.First(); //3.0 FindAll() 找到所有符合条件的数据,并全部返回 var newlist1 = list.FindAll(p => p.Age > 3); //4.0 Find() 找到所有符合条件的数据,并返回第一条数据 var pig2 = list.Find(c => c.Id > 0); //pig2.Say(); //5.0 Where() //链式编程,从list集合中获取id==2的数据集合,通过foreach遍历新的数据集合,将数据打印出来 var pig3 = list.FindAll(p => p.Id == 2).FirstOrDefault(); //和sql很像 //select * from list where age>2 and name like '%猪%' //list.Where(p => p.Age > 2 && p.Name.Contains("猪")).ToList().ForEach(c => c.Say()); //lambda表达式的多条件或组合 list.Where(c => c.Id == 1 || c.Id == 2).ToList().ForEach(c => c.Say()); } #endregion #region SQO 方法之 排序方法 OrderBy(), OrderByDescending()的使用 static void c01OrderBy() { var list = GetPigList(); //1.0 对list集合进行id的正序排列 list.OrderBy(c => c.Id).ToList().ForEach(c => c.Say()); //2.0 对list集合进行id的倒序排列 list.OrderByDescending(c => c.Id).ToList().ForEach(c => c.Say()); } #endregion #region 链式编程 static void c01LinkCode() { var list = GetPigList(); list.Where(c => c.Id > 2).Where(c => c.Age > 10).OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString())); } #endregion #region 多条件排序 ThenByDescending() ,ThenBy() static void c01ThenBy() { var pigList = GetPigList(); //多条件排序: //第一个排序条件可以使用OrderBy(),OrderByDescending() //但是第二和以后的其他排序条件则必须使用ThenByDescending() ,ThenBy() 进行排序 // 语法和sql很像 pigList.OrderBy(c => c.TypeId).ThenByDescending(c => c.Id).ToList().ForEach(c => c.Say()); } #endregion #region Any() Count() 的用法 static void c01Other() { var list = GetPigList(); Console.WriteLine(list.Any(c => c.Age > 12)); //true Console.WriteLine(list.Any(c => c.Id < 0)); //false Console.WriteLine(list.Count(c => c.Id < 0));//0 Console.WriteLine(list.Count(c => c.Age > 0));//3 } #endregion #region Select() 投影方法的演示,作用:将一个集合投影到另外一个集合(重点) static void c01Select() { //获取list集合中的id和name 作为一个新的集合返回 var list = GetPigList(); //利用Select() 将list集合中的id name 属性的值投影成匿名类返回 var newlist = list.Select(c => new { c.Id, c.Name }).ToList(); newlist.ForEach(c => Console.WriteLine(c.ToString())); } #endregion #region 利用Skip().Take()方法实现分页查询(重点) static void c01GetListByPage() { int tcount = 0; GetListByPage(3, 2, out tcount); } static List<Pig> GetListByPage(int pageIndex, int pageSize, out int totalcount) { List<Pig> list = GetPigList(); //从集合中分页获取的数据 int skipCount = (pageIndex - 1) * pageSize; totalcount = list.Count(); //Skip:从集合中跳过指定的行数,Take:从跳过的指定行数下一行开始取指定的数据行数 return list.Skip(skipCount).Take(pageSize).ToList(); } #endregion #region join() 两个集合连接查询,模拟实现sql中的inner join(交叉连接) static void c01Join() { var piglist = GetPigList(); var typelist = GetTypeList(); //1.0 利用join方法将两个集合联合查询,最终得到piglist中的Id,name,同时获取typelist中的typename //sql 语句:select c.Id,c.Name,t,TypeName from piglist c inner join typelist t on (c.TypeId=t.TypeId) var newlist = piglist.Join(typelist, c => c.TypeId, t => t.TypeId, (c, t) => new { c.Id, c.Name, t.TypeName }).ToList(); newlist.ForEach(c => Console.WriteLine(c.ToString())); } #endregion #region GroupBy() 分组查询 static void c01GroupBy() { var list = GetPigList(); //1.0 调用GroupBy() 扩展方法 进行typeId的分组操作 //select TypeID from list group by TypeId var groupList = list.GroupBy(c => c.TypeId).ToList(); groupList.ForEach(c => { Console.WriteLine("分组号:" + c.Key + "------"); c.ToList().ForEach(d => d.Say()); }); } #endregion #endregion
2.0 Linq To Object
#region 10.0 Linq to object (linq to sql, linq to xml) #region linq Where 的写法 static void c01LinqWhere() { var list = GetPigList(); //SQO写法 var newlist = list.Where(c => c.Age == 12 && c.Name.Contains("猪")); //linq的写法 //sql 语句:select c.Id,c.Name from list c where c.Age==12 and c.Name like '%猪%' var newlist2 = (from c in list where c.Age == 12 && c.Name.Contains("猪") select new { c.Id, c.Name }).ToList(); // newlist2.ForEach(c => Console.WriteLine(c.ToString())); var newlist3 = (from c in list where c.Name.Contains("猪") && c.Id > 3 select new { c.Id, c.Name }).ToList(); newlist3.ForEach(c => Console.WriteLine(c.ToString())); } #endregion #region join() 的linq写法 static void c01linqJoin() { var pigList = GetPigList(); var typeList = GetTypeList(); //linq的联表查询 (from c in pigList join t in typeList on c.TypeId equals t.TypeId select new { c.Id, c.Name, t.TypeName }).ToList().ForEach(c => Console.WriteLine(c.ToString())); } #endregion #region GroupBy 的linq写法 static void c01LinqGroupBy() { var list = GetPigList(); (from c in list group c by c.TypeId).ToList().ForEach(c => { Console.WriteLine("---------分组号:" + c.Key + "---------"); c.ToList().ForEach(d => d.Say()); }); } #endregion #region Linq的排序写法 static void c01Sort() { var list = GetPigList(); (from c in list orderby c.Id descending orderby c.Age descending select c).ToList().ForEach(c => Console.WriteLine(c.ToString())); } #endregion #endregion
3.0 系统内置委托
#region 系统内置委托 & lambda表达式 #region 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值 /// <summary> /// 系统内置委托之 Predicate,接收一个泛型参数,返回一个bool值 /// </summary> static void C08Predicate() { List<Pig> list = GetPigList(); // 1.0.0查询当前年龄大于四岁的对象以新集合的形式返回 var newlist = list.FindAll(query); // 1.0.1 利用匿名委托来代替自定义方法query var newlist2 = list.FindAll(delegate(Pig pig) { return pig.Age > 4; }); //1.0.2 利用lambda表达式代替匿名委托 goes to var newlist3 = list.FindAll(c => c.Age > 4); } #endregion #region 系统内置委托之 Action ,接受一个泛型参数,无返回值 /// <summary> /// 系统内置委托之 Action ,接受一个泛型参数,无返回值 /// </summary> static void c08Action() { var list = GetPigList(); list.ForEach(c => c.Say()); } #endregion #region Comparison接收两个相同类型的参数,返回一个整数 /// <summary> /// Comparison接收两个相同类型的参数,返回一个整数 /// </summary> static void c08Comparison() { var list = GetPigList(); //1.0 对list进行排序 list.Sort((pre, next) => next.Id - pre.Id); //2.0 遍历输出 list.ForEach(c => c.Say()); } #endregion #region 系统内置委托Func() /// <summary> /// 系统内置委托Func() /// </summary> static void c08Func() { var list = GetPigList(); //利用func<T,Result>进行集合数据筛选操作 var newlist = list.Where(c => c.Age > 4).ToList(); newlist.ForEach(c => c.Say()); } #endregion #endregion