OrderBy는 배열이나 컬렉션의 요소를 오름차순 또는 내림차순으로 정렬할 때 사용하는 LINQ 정렬 연산자입니다.
GroupBy 연산자는 LINQ의 그룹화 연산자(Grouping Operators) 범주에 속합니다. 이 연산자는 평면적인 형태의 항목 시퀀스를 입력받아 특정 키를 기준으로 각 항목들을 그룹(IGrouping<K,V>)으로 구성하고, 그룹들의 시퀀스를 반환합니다.
GroupBy 예제
class ElectronicGoods {
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public static List<ElectronicGoods> GetElectronicItems() {
return new List<ElectronicGoods>() {
new ElectronicGoods { Id = 1, Name = "Mobile", Category = "Phone"},
new ElectronicGoods { Id = 2, Name = "LandLine", Category = "Phone"},
new ElectronicGoods { Id = 3, Name = "Television", Category = "TV"},
new ElectronicGoods { Id = 4, Name = "Grinder", Category = "Food"},
new ElectronicGoods { Id = 5, Name = "Mixer", Category = "Food"},
};
}
}
class Program {
static void Main() {
//Category를 기준으로 그룹화
var res = ElectronicGoods.GetElectronicItems().GroupBy(x => x.Category).Select(x => new {
Key = x.Key,
electronicGoods = x.OrderBy(c => c.Name)
});
foreach (var group in res) {
Console.WriteLine("{0} - {1}", group.Key, group.electronicGoods.Count());
Console.WriteLine("----------");
foreach (var electronicGoods in group.electronicGoods) {
Console.WriteLine(electronicGoods.Name + "\t" + electronicGoods.Category);
}
Console.WriteLine(); Console.WriteLine();
}
Console.ReadKey();
}
}출력 결과
Phone - 2 ---------- LandLine Phone Mobile Phone TV - 1 ---------- Television TV Food - 2 ---------- Grinder Food Mixer Food
위 예제에서는 전자제품 목록을 Category를 기준으로 그룹화하고, 각 그룹 내부에서는 제품 이름(Name)을 기준으로 다시 오름차순 정렬했습니다. group.Key에는 그룹화 기준이 되는 카테고리 이름이 담기며, Count() 메서드를 통해 해당 그룹에 속한 항목의 개수를 확인할 수 있습니다.
OrderBy 예제
class ElectronicGoods {
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public static List<ElectronicGoods> GetElectronicItems() {
return new List<ElectronicGoods>() {
new ElectronicGoods { Id = 1, Name = "Mobile", Category = "Phone"},
new ElectronicGoods { Id = 2, Name = "LandLine", Category = "Phone"},
new ElectronicGoods { Id = 3, Name = "Television", Category = "TV"},
new ElectronicGoods { Id = 4, Name = "Grinder", Category = "Food"},
new ElectronicGoods { Id = 5, Name = "Mixer", Category = "Food"},
};
}
}
class Program {
static void Main() {
//Category를 기준으로 오름차순 정렬
var res = ElectronicGoods.GetElectronicItems().OrderBy(x => x.Category);
foreach (var items in res) {
Console.WriteLine(items.Name + "\t" + items.Category);
}
Console.ReadKey();
}
}출력 결과
Grinder Food Mixer Food Mobile Phone LandLine Phone Television TV
이 예제에서는 전체 목록을 Category 기준으로 오름차순 정렬하여 출력합니다. 만약 내림차순으로 정렬하고 싶다면 OrderByDescending(x => x.Category)를 사용하면 됩니다. 이처럼 OrderBy는 단일 조건 정렬에, GroupBy는 키 기반 데이터 묶음 처리에 유용하게 활용됩니다.