[C# 문법] Linq를 이용하여 Group By 하는 방법



 

안녕하세요~~

 

오늘은 C# 문법 중 하나인 Linq에서 Group By 하는 방법에 대해서 알려드리고자 합니다.

 

처음에는 문법이 익숙하지 않아서 어렵게 느껴지실 수 있지만..예제코드를 따라 해보시면서 손에 익히시면 충분히 자유자재로 사용 가능하실거라 생각해요!


 

[시나리오]


1.     오라클 연동 후, Student Table을 조회하여 DataSet에 저장

2.     저장된 DataSetLinq를 이용하여 데이터 조회

3.     Group By 함수를 이용하여, CLASS별 학생 수를 조회

 

위의 시나리오 대로 예제코드를 작성해 보도록 할게요.

 

오라클 연동은 앞에서 포스팅 하였기 때문에따로 설명 드리지는 않겠습니다.

 

대신 아래 URL 남겨 놓을게요!ㅎㅎ


오라클 연동 URL https://afsdzvcx123.tistory.com/245?category=784688


[예제코드]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

using System;

using System.Collections.Generic;

using System.Data;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Xml.Linq;

 

namespace test

{

    class Program

    {

        public enum COLUMNS { SCHOOL_NO, CLASS, NAME, AGE, GRADE, SCORE};

        public static DataSet ds = new DataSet();

 

        static void Main(string[] args)

        {

            OracleDBManager dbManager = new OracleDBManager();

 

            Console.WriteLine("데이터 베이스 연결 ...");

 

            if (dbManager.GetConnection() == false)

            {

                Console.WriteLine("데이터 베이스 접속 연결 실패!!!!!");

                return;

            }

 

            Console.WriteLine("데이터 베이스 접속 성공!!!");

 

            GetData(); //SELECT문으로 데이터 조회  DataSet 저장

 

            Console.WriteLine();

            Console.WriteLine();

            Console.WriteLine();

 

            //DataTable Linq 이용하여 Filter

            DataTable dt = new DataTable();

 

            //Class, Name  Group by 실행 하여 데이터 조회

            dt = ds.Tables[0].AsEnumerable()

                .GroupBy(row => new

                {

                    CLASS = row.Field<string>("CLASS"),

                    NAME = row.Field<string>("NAME")

                })

                .Select(g =>

                    {

                        var row = ds.Tables[0].NewRow();

 

                        row["CLASS"= g.Key.CLASS;

                        row["NAME"= g.Key.NAME;

 

                        return row;

 

                    }).CopyToDataTable();

 

 

            //DataTable 출력

            for(int i = 0; i < dt.Rows.Count; i++)

            {

                for (int col = 0; col < dt.Columns.Count; col++)

                {

                    Console.Write(" {0} ", dt.Rows[i][col].ToString());

                }

                Console.WriteLine();

            }

 

        }

 

        /// <summary>

        /// 쿼리문 작성하여

        /// 데이터베이스에 저장되어 있는 데이터

        /// 가져오는 메서드

        /// </summary>

        public static void GetData()

        {

            OracleDBManager dbManager = new OracleDBManager();

 

            string query = string.Empty;

            query = @"

                SELECT SCHOOL_NO, CLASS, NAME, AGE, GRADE, SCORE

                FROM WIN.STUDENT";

 

            dbManager.ExecuteDsQuery(ds, query);

        }

    }

}

 

Colored by Color Scripter

cs

 

[DataSet에 저장된 Student Table]


 

[Linq로 조회 된 DataTable]


[실행결과]


 

이처럼 Class, NameGroup by묶고, 결과적으로 그룹으로 묶인 학생들만 데이터가 조회되어 DataTable에 알맞게 저장된 것을 확인하실 수 있습니다.

 

추가적으로, Group bySelect 문을 사용하실 때 Multi Column은 예제코드에서 사용하는 것처럼 Groupby(row => new {,..}) 형태로, Select(g => {,..}) 형태로 사용하시면 되겠습니다!

 

글 읽어 주셔서 감사합니다ㅎㅎ


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY