學習整理!
定義基礎類
/// <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();
結果: