C#

C# Linq의 Group By가 복수로 필요할 경우의 처리방법

지오준 2022. 1. 31.
반응형

1. 원인 : 원본 데이터(DB테이블, List형식등)의 그룹으로 나눠서 일단 데이터를 추합한 후에 최종적으로 필요한 데이터를 추출할 경우가 대상이 될 경우

2. 처리방법 : 기본적인 처리순서는 원본 데이터의 최소한의 조건(Where)을 처리한 후에 그룹(Group By)을 설정하고 그 결과를 조회(Select)해서 필요한 항목(컬럼)을 추출하면 일단 첫번째 그룹처리는 완료됩니다. 그후에 최종적으로 필요한 데이터를 추출하기 위한 그룹(Group By)을 설정하고 필요한 항목(컬럼)을 추출하면 원한은 데이터가 나옵니다.

 

기본적인 코드는 다음과 같습니다.  

var result = from dataoriginal(원번데이터명) in data(DB테이블이나 List형식의데이터등)

                where (데이터 추출 조건 설정)

                group 그룹명 by new

                {

                    첫번째 그룹 조건설정

                } into 첫번째 그룹조건명

                select new

                {

                     중간 추출할 항목 설정

                } into 중간 추출항목명

                group 그룹명 by new

                {

                    두번째 그룹 조건설정

                } into 두번째 그룹조건명

                select new

                {

                     최종적으로 추출할 항목 설정

                };

3. 샘플코드

var originalDataQuery =
    from originalData in dataTable(DB테이블명)
    where
        originalData.조건컬럼명 == 조회조건값 (원본데이터 추합조건)
    group originalData by new
    {
        careerDetail.컬럼1, (그룹조건의 컬럼1)
        careerDetail.컬럼2, (그룹조건의 컬럼2)
    } into originalDataGroup
    select new
    {
        추출컬럼1 = originalDataGroup.Key.추출컬럼1명, (추출컬럼1의 값)
        추출컬럼2 = originalDataGroup.First().추출컬럼2명, (추출컬럼2의 첫번째 레코드값)
        추출컬럼3 = originalDataGroup.Count() (추출레코드의 합계값)
    } into careerDetail2
    group careerDetail2 by new
    {
        careerDetail2.컬럼1명 (그룹조건2의 컬럼1)
    } into careerDetailGroup2
    select new
    {
        추출컬럼1 = originalDataGroup.Key.추출컬럼1명, (추출컬럼1의 값)
        추출컬럼2 = originalDataGroup.First().추출컬럼2명, (추출컬럼2의 첫번째 레코드값)
        추출컬럼3 = originalDataGroup.Count() (추출레코드의 합계값)
    };

 

반응형

댓글