>백엔드 개발 >C++ >LINQ를 사용하여 데이터를 어떻게 피벗할 수 있나요?

LINQ를 사용하여 데이터를 어떻게 피벗할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-05 22:05:41505검색

How Can I Pivot Data Using LINQ?

LINQ를 사용하여 데이터 피벗

데이터 처리에서 피벗이란 데이터를 여러 열과 행이 포함된 형식에서 여러 개가 포함된 형식으로 변환하는 것을 의미합니다. 행과 열. LINQ를 사용하여 데이터 피벗을 수행하는 방법은 다음과 같습니다.

TypeCode 열거형과 User 개체가 포함된 항목 컬렉션을 생각해 보세요. 문의에 설명된 대로, 제공된 샘플 데이터에 표시된 대로 컬렉션을 평면화하고 격자형 구조로 표시하려고 합니다.

TypeCode User
1 Don Smith
1 Mike Jones
1 James Ray
2 Tom Rizzo
2 Alex Homes
3 Andy Bates

원하는 출력은 다음과 같습니다.

1 2 3
Don Smith Tom Rizzo Andy Bates
Mike Jones Alex Homes
James Ray

LINQ 솔루션:

LINQ는 이러한 유형의 피벗 작업을 효율적으로 처리할 수 있습니다. 다음은 방법을 보여주는 코드 조각입니다.

// Sample data
var data = new[] {
    new { Foo = 1, Bar = "Don Smith"},
    new { Foo = 1, Bar = "Mike Jones"},
    new { Foo = 1, Bar = "James Ray"},
    new { Foo = 2, Bar = "Tom Rizzo"},
    new { Foo = 2, Bar = "Alex Homes"},
    new { Foo = 3, Bar = "Andy Bates"},
};

// Group into columns and select rows per column
var grps = from d in data
          group d by d.Foo
          into grp
          select new {
              Foo = grp.Key,
              Bars = grp.Select(d2 => d2.Bar).ToArray()
          };

// Find the total number of (data) rows
int rows = grps.Max(grp => grp.Bars.Length);

// Output columns
foreach (var grp in grps) {
    Console.Write(grp.Foo + "\t");
}
Console.WriteLine();

// Output data
for (int i = 0; i < rows; i++) {
    foreach (var grp in grps) {
        Console.Write((i < grp.Bars.Length ? grp.Bars[i] : null) + "\t");
    }
    Console.WriteLine();
}

출력:

1 2 3
Don Smith Tom Rizzo Andy Bates
Mike Jones Alex Homes
James Ray

이 LINQ 솔루션 동일한 Foo 값을 가진 항목을 그룹화한 다음 열당 막대(사용자 이름)를 선택하여 데이터를 원하는 형식으로 효과적으로 피벗합니다. 각 열의 항목을 기준으로 최대 행 수를 계산하고 잘 구성된 테이블 형식으로 출력을 생성합니다.

위 내용은 LINQ를 사용하여 데이터를 어떻게 피벗할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.