본문 바로가기
C#/Linq

C# - 클래스를 이용한 Linq의 사용법

by 개발 그리고 게발 2021. 8. 19.
728x90

Linq를 더 유용하게 사용하는 방법으로는 임의로 만든 클래스의 속성을 제어할 때 더 유용하게 사용할 수 있습니다.

 

아래의 클래스와 예시를 이용하여 Linq를 효과적으로 사용할 수 있는 방법에 대해 알아보겠습니다.

 

 


 

Food.cs

public class Food
{
    public int hotdog { get; set; }
    public int pizza { get; set; }
    public int chicken { get; set; }
    public List<string> drink = new List<string>();
}

public class Sample
{
    Food jam_store = new Food();
    jam_store.hotdog = 500;
    jam_store.pizza = 700;
    jam_store.chicken = 1000;
    jam_store.drink = new List<string>() { "Coke", "Sprite", "Fanta" };

    Food son_store = new Food();
    son_store.hotdog = 100;
    son_store.pizza = 300;
    son_store.chicken = 700;
    son_store.drink = new List<string>() { "Grape juice", "Apple juice", "Coke" };

    Food kim_store = new Food();
    kim_store.hotdog = 900;
    kim_store.pizza = 1400;
    kim_store.chicken = 2000;
    kim_store.drink = new List<string>() { "Beer", "Soju", "Wine" };

    List<Food> store_list = new List<Food>();
    store_list.Add(jam_store);
    store_list.Add(son_store);
    store_list.Add(kim_store);
}

 


 

 

Food 클래스에는 int형도 있고 List<string>형도 혼재되어 있습니다. 

이런 내부의 속성들을 Linq를 이용하면 간결하게 속성값을 읽어 작업할 수 있습니다.

 

Select 조건처리

Select함수로 x의 hotdog를 선택하여 합계를 처리합니다.

여기서 x는 Food클래스를 뜻하며 x.hotdog는 Food클래스의 hotdog속성만 선택한다는 의미이며, Sum으로 hotdog의 합계를 처리합니다.

// 결과값 : 1500
int sum_hotdog = store_list.Select(x => x.hotdog).Sum();

 

 

Where 조건처리

 

예시1

store_list에서 hotdog가 700 미만인 값을 선택한다는 의미이며, jam_store, son_store만 선택됩니다.

List<Food> temp1 = store_list.Where(x => x.hotdog < 700).ToList();

 

 

예시2

store_list에서 hotdog가 700 미만이고 chicken이 700초과인 값을 선택한다는 의미이며, jam_store만 선택됩니다

List<Food> temp2 = store_list.Where(x => x.hotdog < 700 && x.chicken > 700).ToList();

 

 

예시3

store_list에서 drink리스트 중에 Coke가 있는 Food클래스만 선택하여, 선택된 Food클래스의 pizza속성을 합계처리 합니다.

즉 jam_store, son_store의 pizza속성만 합계처리되어 결과값이 나오게 됩니다.

// 결과값 : 1000
int temp3 = store_list.Where(x => x.drink.Contains("Coke")).Select(x => x.pizza).Sum();

 

 

OrderBy 조건처리

store_list에서 각각의 Food클래스 중 hotdog의 값을 비교하여 orderby처리 합니다.

다른값은 무시된 채 hotdog의 값만으로 asc정렬 처리 됩니다.

desc 정렬 시 OrderByDescending함수를 이용할 수 있습니다.

List<Food> temp_food4 = store_list.OrderBy(x => x.hotdog).ToList();
728x90

'C# > Linq' 카테고리의 다른 글

C# - Linq의 기본 사용법  (0) 2021.08.13

댓글