>백엔드 개발 >C++ >LINQ의 GroupBy, Sum 및 Count를 사용하여 일반적인 함정을 피하기 위해 컬렉션의 항목을 효율적으로 그룹, 합계 및 계산하려면 어떻게해야합니까?

LINQ의 GroupBy, Sum 및 Count를 사용하여 일반적인 함정을 피하기 위해 컬렉션의 항목을 효율적으로 그룹, 합계 및 계산하려면 어떻게해야합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-24 16:42:12425검색

How can I use LINQ's GroupBy, Sum, and Count to efficiently group, sum, and count items in a collection, avoiding common pitfalls?

LINQ 익히기: 효율적인 데이터 집계를 위한 GroupBy, 합계 및 개수

이 문서에서는 LINQ의 GroupBy, SumCount 메서드를 사용하여 컬렉션 내 항목을 효율적으로 그룹화, 합산 및 계산하는 C# 프로그래밍의 일반적인 과제를 다룹니다. 실제 사례를 살펴보고 일반적인 함정을 강조하며 강력한 솔루션을 제시하겠습니다.

시나리오: 제품 집계

각각 Product, ProductCodePrice이 포함된 Name 개체 컬렉션을 상상해 보세요. 목표는 이러한 제품을 ProductCode별로 그룹화하고, 각 코드의 총 가격을 계산하고, 각 그룹의 제품 수를 계산하는 것입니다. 원하는 출력은 각 항목이 제품 코드, 총 가격 및 제품 개수를 나타내는 새 컬렉션입니다.

초기(결함이 있는) 접근 방식

초기 시도는 다음과 같습니다.

<code class="language-csharp">List<Product> products = LoadProducts();
List<ResultLine> result = products
    .GroupBy(p => p.ProductCode)
    .SelectMany(group => group.Select(
        p => new ResultLine
        {
            ProductName = p.Name,
            Quantity = group.Count().ToString(),
            Price = group.Sum(p => p.Price).ToString(),
        }))
    .ToList();</code>

이 코드의 문제점은 SelectMany을 사용하는 것입니다. 이로 인해 그룹화된 결과가 평면화되어 잘못된 Quantity(항상 1)이 발생합니다.

올바른 해결책

효율적이고 정확한 솔루션은 SelectMany을 피하고 각 그룹에서 집계된 데이터를 직접 선택합니다.

<code class="language-csharp">List<ResultLine> result = products
    .GroupBy(p => p.ProductCode)
    .Select(group => new ResultLine
    {
        ProductName = group.First().Name, // Assumes all products with the same code have the same name
        Quantity = group.Count(),
        Price = group.Sum(p => p.Price),
    })
    .ToList();</code>

이 수정된 코드는 제품을 올바르게 그룹화합니다. group.First().Name은 각 그룹의 첫 번째 제품에서 이름을 검색합니다(동일한 제품 코드에 대해 일관된 이름을 가정). group.Count()은 각 그룹별로 정확한 개수를 제공하고, group.Sum(p => p.Price)은 총 가격을 계산합니다. 이제 QuantityPrice이 적절한 숫자 유형(각각 정수 및 소수)이 되어 데이터 무결성이 향상됩니다.

SelectMany을 제거하고 그룹 속성에 직접 액세스함으로써 효율적이고 정확한 데이터 집계를 달성하고 의도하지 않은 데이터 평면화라는 일반적인 함정을 방지합니다. 이 접근 방식을 사용하면 결과 컬렉션이 원래 제품 컬렉션의 그룹화, 합산 및 계산된 데이터를 정확하게 반영할 수 있습니다.

위 내용은 LINQ의 GroupBy, Sum 및 Count를 사용하여 일반적인 함정을 피하기 위해 컬렉션의 항목을 효율적으로 그룹, 합계 및 계산하려면 어떻게해야합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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