C# - Lambda表达式

前言
  1、"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量,lambda表达式简化了匿名委托的使用。
  2、它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。
简洁
  lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
  lambda表达式:
    1.一个参数:param => expr
    2.多个参数:(param, list) => expr

namespace study_lambda
{
    /// <summary>
    /// 委托跟表达式的两段代码,我们可以看出一些东东吧:其实表达式(p => p + 10;)中的 p 就代表委托方法中的参数,而表达式符号右边的 p+10,就是委托方法中的返回结果。
    /// </summary>
    class LambdaPrinciple
    {
        delegate int HuaQian(int money);

        // 委托
        void Test()
        {
            HuaQian hq = HqTest;
            int money = hq(10);
        }
        public int HqTest(int money)
        {
            return money + 10;
        }

        //表达式
        void Test2()
        {
            HuaQian hq = p => p + 10;
            int money = hq(10);
        }

        delegate int HuaQian1(int money, int money2);
        //多参数
        void Test3() {
            HuaQian1 hq = (p, m) => p + m;
            int money = hq(1, 2);
        }

        //lambda主体运算复杂 
        void Test4() {
            HuaQian1 hq = (p, m) => {
                if (p < 0)
                {
                    return m;
                }
                else
                {
                    return p + m;
                }
            };
        }
    }

}

  

using System.Collections.Generic;

namespace study_lambda
{
    class Employee
    {
        public string Name { get; set; }
        public string Code { get; set; }
        public int Age { get; set; }
        public Employee(string name, string code, int age)
        {
            Name = name;
            Code = code;
            Age = age;
        }
        public static List<Employee> CreateEmployees()
        {
            List<Employee> employees = new List<Employee>();
            Employee employee = new Employee("gongyg", "SC0001", 29);
            employees.Add(employee);
            employee = new Employee("gumd", "SC0002", 31);
            employees.Add(employee);
            employee = new Employee("gongxy", "SC0003", 3);
            employees.Add(employee);
            employee = new Employee("gongxh", "SC0004", 1);
            employees.Add(employee);
            employee = new Employee("gongyg", "SC0005", 29);
            employees.Add(employee);
            return employees;
        }

        public override string ToString()
        {
            return Name + "-" + Code + "-" + Age;
        }
    }
    class Score
    {
        public string Code { get; set; }
        public string Project { get; set; }
        public int ProjectScore { get; set; }
        public Score(string code, string project, int projectScore)
        {
            Code = code;
            Project = project;
            ProjectScore = projectScore;
        }
        public static List<Score> CreateScores()
        {
            List<Score> scores = new List<Score>();
            Score score = new Score("SC0001", "数学", 89);
            scores.Add(score);
            score = new Score("SC0001", "语文", 49);
            scores.Add(score);
            score = new Score("SC0001", "英语", 29);
            scores.Add(score);
            score = new Score("SC0002", "数学", 68);
            scores.Add(score);
            score = new Score("SC0003", "数学", 73);
            scores.Add(score);
            score = new Score("SC0004", "数学", 56);
            scores.Add(score);
            return scores;
        }
    }
}

using System.Collections.Generic;
using System.Linq;

namespace study_lambda
{
    /// <summary>
    /// List集合中的Lambda表达式的运用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            List<Employee> employees = Employee.CreateEmployees();
            List<Score> scores = Score.CreateScores();

            //查询
            List<Employee> emps = employees.Where(p => p.Age > 20 || p.Name == "gongxy" || p.Name.Contains("g")).ToList();

            //返回第一个符合条件的数据,不存在的时候返回Null。
            //当查询条件能查到多个时,直接报异常
            Employee emp = employees.SingleOrDefault(p => p.Name == "gumd1");

            //返回第一个符合条件的数据,不存在的时候返回Null。
            Employee emp2 = employees.FirstOrDefault(p => p.Name == "gongyg");

            //排序
            //string.Join(',', emps2)
            //OrderBy 从小到大
            //OrderByDescending 从大到小
            List<Employee> emps2 = employees.OrderBy(p => p.Age).ToList();
            List<Employee> emps3 = employees.OrderByDescending(p => p.Age).ToList();

            //返回符合条件的实体个数
            int employeeNumber = employees.Count(p => p.Age >= 20);

            //查找所有名字中含有【g】的实体集合
            List<Employee> emps4 = employees.FindAll(p => p.Name.Contains("g")).ToList();
            List<IGrouping<string, Employee>> strs = employees.GroupBy(p => p.Name).ToList();
            foreach (IGrouping<string, Employee> item in strs)
            {
                string key = item.Key;
            }

            //返回最大的年龄
            int age = employees.Max(p => p.Age);

            //对所有年龄求和
            int ageSum = employees.Sum(p => p.Age);

            //求年龄的平均值
            double ageAvg = employees.Average(p => p.Age);

            //获取所有学生姓名,并去重
            List<string> strs2 = employees.Select(p => p.Name).Distinct().ToList();
            //匿名类型
            var emps5 = employees.Select(p => new { p.Name, p.Code });
            foreach (var item in emps5)
            {
                string name = item.Name;
                string code = item.Code;
            }
        }
    }
}

  

posted @ 2020-11-02 17:10  gygtech  Views(202)  Comments(0Edit  收藏  举报