C# lambda和Linq

来源:互联网 发布:本地pubmed数据库 编辑:程序博客网 时间:2024/05/17 07:34

1.Action委托 接收参数 无返回值

         #region 8.0.1 Action委托 接收参数 无返回值        public static void C0801Action()        {            List<int> list = new List<int> { 1, 2, 3, 4, 5 };            //遍历打印            list.ForEach(fe);            //利用匿名函数            list.ForEach(delegate (int i) { Console.WriteLine(i.ToString()); });            //利用lambda表达式打印            list.ForEach(i => Console.WriteLine(i));        }        private static void fe(int obj)        {            Console.WriteLine(obj.ToString());        }        #endregion

2.Predicate 泛型委托:接收一个参数,返回bool类型

         static void C0802Predicate()        {            var list = GetPigeList();            list.FindAll(c => c.Age > 100);            //有多个返回第一个            var pig = list.Find(c => c.Name == "小猪");        }

3.func:接收参数,返回参数,但不固定

         static void C0802Func()        {            var list = GetPigeList();            //list中年龄大于一的猪            list.Where(c => c.Age > 1).ToList().ForEach(i => Console.WriteLine(i.ToString1()));        }

4.Comparison返回一个整数,接收两个同类型的参数

        #region Comparison<T>返回一个整数,接收两个同类型的参数        static void C0804Comparison()        {            var list = GetPigeList();            //原始的            list.Sort(Query1);            //匿名委托            list.Sort(delegate (Pig p, Pig n) { return n.Age - p.Age; });            //按年龄倒叙排列            list.Sort((p, n) => n.Age - p.Age);            list.ForEach(i => Console.WriteLine(i.ToString1()));        }        static int Query1(Pig p, Pig n)        {            return n.Age - p.Age;        }        #endregion

5.SQO方法-标准查询运算符

        #region SQO方法-标准查询运算符        static void C0901Where()        {            var list = GetPigeList();            //age>5||Name=""            list.Where(c => c.Age > 5 || c.Name == "小猪").ToList().ForEach(c => Console.WriteLine(c.ToString1()));            //FirstOrDefault演示            list.FirstOrDefault(c => c.Age > 5 || c.Name == "小猪");            list.LastOrDefault(c => c.Age > 5 || c.Name == "小猪");        }        //对集合进行排序        static void C0902Sort()        {            var list = GetPigeList();            //正序            list.OrderBy(c => c.Age).ToList().ForEach(i => Console.WriteLine(i.ToString1()));            //正序            list.OrderByDescending(c => c.Age).ToList().ForEach(i => Console.WriteLine(i.ToString1()));            //根据最后一个排序            list.OrderByDescending(c => c.Age).OrderByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString1()));            //后面的组合排序用ThenBy            list.OrderByDescending(c => c.Age).ThenByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString1()));        }        //投影方法        static void C0904Select()        {            var list = GetPigeList();            //将lis中的Name属性的值获取成一个新的集合            List<string> nlist = list.Select(c => c.Name).ToList();            //将lis中的Name和Age属性的值获取成一个新的集合,匿名类            list.Select(c => new { c.Name, c.Age }).ToList().ForEach(c => Console.WriteLine(c.Name + ":" + c.Age));            nlist.ForEach(c => Console.WriteLine(c.ToString()));        }        #endregion

6.分页方法Skip(skipNum).take(页容量)

        static void C0905Page()        {            int rowCount = 0;            C0905ByPage(1, 2, out rowCount);        }        static List<Pig> C0905ByPage(int pageIndex, int pageSize, out int rowCount)        {            rowCount = 0;            var list = GetPigeList();            rowCount = list.Count(c => c.Age > 5);            return list.Where(c => c.Age > 5).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();        }

7.链表查询join

static void C0906Join()        {            var piglist = GetPigeList();            var pigTypeList = GetPigeTypeList();            //查找piglist集合中的Name和ID值同时和Typelist的TName的值作为一个新的匿名类集合返回            piglist.Join(pigTypeList, p => p.TypeID, t => t.TypeID, (p, t) => new            {                p.ID,                p.Name,                t.TName            }).ToList().ForEach(c => Console.WriteLine(c.ID + ":" + c.Name + ":" + c.TName));        }

8.分组GroupBy

 static void C0907GroupBy()        {            var list = GetPigeList();            //根据TypeID分组            list.GroupBy(c => c.TypeID).ToList().ForEach(c =>            {                //c代表分组以后的每个小组                Console.WriteLine("---分组号" + c.Key);                //g代表每个小组c中的pig对象                c.ToList().ForEach(g => Console.WriteLine(g.ToString1()));            });        }

9.Linq

        static void C1001Where()        {            var list = GetPigeList();            var nlist1 = (from c in list where c.Age > 5 select c).ToList();        }        static void C1002Sort()        {            var list = GetPigeList();            var orderList = (from c in list orderby c.Age descending select new { c.Name,c.Age}).ToList();        }        static void C1003LinqJoin()        {            var piglist = GetPigeList();            var pigTypeList = GetPigeTypeList();            var nlist = (from c in piglist                         join t in pigTypeList                         on c.TypeID equals t.TypeID                         select new { c.Name, c.ID, t.TName }).ToList();        }        static void C1004GroupBy()        {            var list = GetPigeList();            (from c in list group c by c.TypeID).ToList();        }

准备两个集合,两个类,和一个扩展方法

        public static List<Pig> GetPigeList()        {            return new List<Pig>            {                new Pig() {TypeID=1,ID=1,Name="八戒",Age=500 },                new Pig() {TypeID=2,ID=2,Name="八戒1",Age=5 },                new Pig() {TypeID=3,ID=3,Name="小猪",Age=1 },                new Pig() {TypeID=2,ID=4,Name="老猪",Age=5},            };        }        public static List<PigType> GetPigeTypeList()        {            return new List<PigType>            {                new PigType() {TypeID=1,TName="土猪" },                new PigType() {TypeID=2,TName="野猪" },                new PigType() {TypeID=3,TName="家猪" }            };        }
 public class Pig    {        public int TypeID { get; set; }        public int ID { get; set; }        public string Name { get; set; }        public int Age { get; set; }    }    public class PigType    {        public int TypeID { get; set; }        public string TName { get; set; }    }    public static class ExPig    {        public static string ToString1(this Pig pig)        {            return "猪ID:" + pig.ID + " 猪名:" + pig.Name + "  猪龄:" + pig.Age;        }    }
原创粉丝点击