-
Group By
using System; using System.Linq; namespace GroupBy { class Profile { public string Name { get; set; } public int Height { get; set; } } class MainApp { static void Main(string[] args) { Profile[] arrProfile = { new Profile(){Name="정우성", Height=186}, new Profile(){Name="김태희", Height=158}, new Profile(){Name="고현정", Height=172}, new Profile(){Name="이문세", Height=178}, new Profile(){Name="하하", Height=171} }; var listProfile = from profile in arrProfile orderby profile.Height group profile by profile.Height < 175 into g select new { GroupKey = g.Key, Profiles = g }; // g.key = true or false foreach (var Group in listProfile) { Console.WriteLine($"- 175cm 미만? : {Group.GroupKey}"); foreach (var profile in Group.Profiles) { Console.WriteLine($" {profile.Name}, {profile.Height}"); } } } } }
Join
using System; using System.Linq; namespace Join { class Profile { public string Name { get; set; } public int Height { get; set; } } class Product { public string Title { get; set; } public string Star { get; set; } } class MainApp { static void Main(string[] args) { Profile[] arrProfile = { new Profile(){Name="정우성", Height=186}, new Profile(){Name="김태희", Height=158}, new Profile(){Name="고현정", Height=172}, new Profile(){Name="이문세", Height=178}, new Profile(){Name="하하", Height=171} }; Product[] arrProduct = { new Product(){Title="비트", Star="정우성"}, new Product(){Title="CF 다수", Star="김태희"}, new Product(){Title="아이리스", Star="김태희"}, new Product(){Title="모래시계", Star="고현정"}, new Product(){Title="Solo 예찬", Star="이문세"} }; //내부 조인 var listProfile = from profile in arrProfile join product in arrProduct on profile.Name equals product.Star select new { Name = profile.Name, Work = product.Title, Height = profile.Height }; Console.WriteLine("--- 내부 조인 결과 ---"); foreach (var profile in listProfile) { Console.WriteLine("이름:{0}, 작품:{1}, 키:{2}cm", profile.Name, profile.Work, profile.Height); } //외부 조인 listProfile = from profile in arrProfile join product in arrProduct on profile.Name equals product.Star into ps from sub_product in ps.DefaultIfEmpty(new Product(){Title="그런거 없음"}) select new { Name = profile.Name, Work = sub_product.Title, Height = profile.Height }; Console.WriteLine(); Console.WriteLine("--- 외부 조인 결과 ---"); foreach (var profile in listProfile) { Console.WriteLine("이름:{0}, 작품:{1}, 키:{2}cm", profile.Name, profile.Work, profile.Height); } } } }
LINQ 연산 메소드 사용
using System; using System.Linq; namespace MinMaxAvg { class Profile { public string Name { get; set; } public int Height { get; set; } } class MainApp { static void Main(string[] args) { Profile[] arrProfile = { new Profile(){Name="정우성", Height=186}, new Profile(){Name="김태희", Height=158}, new Profile(){Name="고현정", Height=172}, new Profile(){Name="이문세", Height=178}, new Profile(){Name="하하", Height=171} }; var heightStat = from profile in arrProfile group profile by profile.Height < 175 into g select new { Group = g.Key==true?"175미만":"175이상", Count = g.Count(), Max = g.Max(profile => profile.Height), Min = g.Min(profile => profile.Height), Average = g.Average(profile => profile.Height) }; // heightStat 그룹으로 나뉘어진 변수 foreach (var stat in heightStat) { Console.Write("{0} - Count:{1}, Max:{2}, ", stat.Group, stat.Count, stat.Max); Console.WriteLine("Min:{0}, Average:{1}", stat.Min, stat.Average); } } } }
아래 예제는 같은 결과.
아이템 x를 x.Id로 그룹핑한 후 각 그룹 아이템 y의 마지막 아이템을 select
출처: 이것이 C#이다.
728x90'C# > 기초' 카테고리의 다른 글
[C#]async, Task, await (0) 2022.03.24 [C#]Resources.resx 열기 (0) 2022.02.25 [C#]문법 (0) 2022.02.18 WritePixels (0) 2021.12.24 [C#]WPF Serial Port (0) 2021.12.21 댓글