c# Lambda表達式結合Linq的學習整理


學習整理!

定義基礎類

    /// <summary>
    /// 球員類
    /// </summary>
    public class Player
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        /// <summary>
        /// 所屬位置
        /// </summary>
        public Location Location { get; set; }

        /// <summary>
        /// 所屬球隊
        /// </summary>
        public Team Team { get; set; }

        public int MvpNumber { get; set; }

    }
    /// <summary>
    /// 位置類
    /// </summary>
    public class Location
    {

        public string LocationCode { get; set; }

        public string LocationName { get; set; }
    }
}
    /// <summary>
    /// 球隊類
    /// </summary>
    public class Team
    {
        public string TeamCode { get; set; }

        public string TeamName { get; set;  }
    }

添加數據

            //初始化測試數據
            List<Player> players = new List<Player>()
            {
                new Player { ID = 1, Name = "Harden", Age = 30,
                    Location = new Location { LocationCode = "PG", LocationName = "控球" },
                    Team = new Team { TeamCode = "HOU", TeamName = "休斯頓火箭" }, MvpNumber = 1
                },
                   new Player { ID = 2, Name = "Curry", Age = 29,
                    Location = new Location { LocationCode = "SG", LocationName = "得分" },
                    Team = new Team { TeamCode = "GSW", TeamName = "金州勇士" }, MvpNumber = 2
                },
                      new Player { ID = 3, Name = "James", Age = 33,
                    Location = new Location { LocationCode = "SF", LocationName = "小前" },
                    Team = new Team { TeamCode = "LAL", TeamName = "洛杉磯湖人" }, MvpNumber = 5
                },
                         new Player { ID = 4, Name = "Zhouqi", Age = 20,
                    Location = new Location { LocationCode = "PF", LocationName = "大前" },
                    Team = new Team { TeamCode = "CHN", TeamName = "鐵頭娃隊" }, MvpNumber = 0
                },
                            new Player { ID = 5, Name = "Yao", Age = 36,
                    Location = new Location { LocationCode = "C", LocationName = "中鋒" },
                    Team = new Team { TeamCode = "CHN", TeamName = "無敵天朝隊" }, MvpNumber = 8
                }
            };

開始測試

引入 using System.Linq;

一、Max/Min(最大值/最小值) 

        var ageMax = players.Max(u => u.Age);
            Console.WriteLine("最大年齡:" + ageMax);

            var ageMin = players.Min(u => u.Age);
            Console.WriteLine("最小年齡:" + ageMin);

 結果:

二、Where條件篩選

Method 1 :源數據.Where( u => u.屬性 篩選條件);

Method 2:from 變量 in 源數據 

     Where 變量.屬性 篩選條件

     Select 變量;

ps: 可加ToList()方法帶出數據(個人比較Low的解釋)

            //查詢MvpNumber值大於2的球員
            //第一種寫法
            var mvpNum1 = players.Where(u => u.MvpNumber > 2).ToList();  

            //第二種寫法
            var mvpNum2 = (from n in players
                           where n.MvpNumber > 2
                           select n).ToList();

輸出:

三、排序 OrderBy

 升序:源數據.OrderBy( u => u.屬性).ToList();

 降序:源數據.OrderByDescending( u => u.屬性).ToList();

ps:必須包含ToList()方法,否則報類型錯誤

          //按年齡升序排序
            players = players.OrderBy(u => u.Age).ToList();
            //按年齡降序排序
            players = players.OrderByDescending(u => u.MvpNumber).ToList();

結果:

四、分組GroupBy

 Method 1:源數據.GroupBy( u => u.屬性).ToList();

 Method 2:from n in 源數據

      group n by n.屬性

      into newGroup

      Select newGroup;

            //按球隊分組
            Console.WriteLine("\n方法一:");

            var teamGroup = players.GroupBy(u => u.Team.TeamName).ToList();

            Console.WriteLine("共有{0}支球隊", teamGroup.Count());
            foreach (var item in teamGroup)
            {
                Console.WriteLine("球隊名稱:{0}", item.Key);

                foreach (var n in item)
                {
                    Console.WriteLine(n.ID + "\t" + n.Name + "\t" + n.Age + "\t" +
                        n.Location.LocationCode + "\t" + n.Location.LocationName + "\t" +
                        n.Team.TeamCode + "\t" + n.Team.TeamName + "\t" + n.MvpNumber);
                }
            }

       
            Console.WriteLine("\n方法二:");

            var teamGroup2 = (from n in players
                              group n by n.Team.TeamName
                           into newGroup
                              select newGroup).ToList();

            Console.WriteLine("共有{0}支球隊", teamGroup2.Count());
            foreach (var item in teamGroup2)
            {
                Console.WriteLine("球隊名稱:{0}", item.Key);

                foreach (var n in item)
                {
                    Console.WriteLine(n.ID + "\t" + n.Name + "\t" + n.Age + "\t" +
                        n.Location.LocationCode + "\t" + n.Location.LocationName + "\t" +
                        n.Team.TeamCode + "\t" + n.Team.TeamName + "\t" + n.MvpNumber);
                }
            }

結果:

 

Linq Group By 用法總結

Key、Count

 

           var q = (from n in players
                     group n by n.Team.TeamName
                     into g
                     select g).ToList();


            Console.WriteLine("\n共{0}支球隊", q.Count()); //如果上面進行ToList操作,q.Count可以不加();
            foreach (var item in q)
            {
                Console.WriteLine("球隊名稱:" + item.Key);
            }

 

結果: 

 

Group By中使用Where約束

            //30歲以上年齡段分組
            var q = (from n in players
                    group n by n.Age
                    into g
                    where g.Key > 30
                    select g).ToList();

結果:

 

Group By根據表達式分組

            //年齡大於30歲且MVP數量大於1分為一組,否則分在另一組
            var q = (from n in players
                     group n by n.Age > 30 && n.MvpNumber >= 1
                    into g
                     select g).ToList();
            foreach (var item in q)
            {

                if (item.Key)
                {
                    Console.WriteLine("滿足條件:");
                    foreach (var n in item)
                    {
                        Console.WriteLine(n.ID + "\t" + n.Name + "\t" + n.Age + "\t" + 
                            n.Location.LocationCode + "\t" + n.Location.LocationName + "\t" +
                            n.Team.TeamCode + "\t" + n.Team.TeamName + "\t" + n.MvpNumber);
                    }
                }
                else
                {
                    Console.WriteLine("不滿足條件:");
                    foreach (var n in item)
                    {
                        Console.WriteLine(n.ID + "\t" + n.Name + "\t" + n.Age + "\t" +
                        n.Location.LocationCode + "\t" + n.Location.LocationName + "\t" +
                        n.Team.TeamCode + "\t" + n.Team.TeamName + "\t" + n.MvpNumber);
                    }
                }
            }

結果:

輸出:

 

 Group By 多列

 

            var q = (from n in players
                     group n by new
                     {
                         //這里的Key包含Age,Name以及Team信息
                         n.Age,
                         n.Name,
                         n.Team
                     }
                    into g
                     select g).ToList();

 

結果:

 

  ego cogito ergo sum!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM