방법: 숫자 시퀀스 값의 합 계산(LINQ to SQL)
업데이트: November 2007
Sum 연산자를 사용하여 시퀀스의 숫자 값의 합을 계산합니다.
LINQ to SQL에서 Sum 연산자의 다음과 같은 특징에 유의하십시오.
표준 쿼리 연산자의 집계 연산자인 Sum은 빈 시퀀스 또는 null만 들어 있는 시퀀스를 0으로 계산합니다. LINQ to SQL에서는 SQL 구문이 바뀌지 않고 남아 있습니다. 따라서 Sum은 빈 시퀀스 또는 null만 들어 있는 시퀀스를 0이 아닌 null로 계산합니다.
중간 결과에 대한 SQL 제한은 LINQ to SQL의 집계에 적용됩니다. 32비트 정수 수량은 64비트 결과를 사용하여 계산되지 않으며 Sum의 LINQ to SQL 변환에 대해 오버플로가 발생할 수 있습니다. 이러한 가능성은 표준 쿼리 연산자 구현이 메모리 내의 해당 시퀀스에 대해 오버플로를 발생시키지 않는 경우에도 존재합니다.
예제
다음 예제에서는 Order 테이블에서 모든 주문의 총 운송료를 검색합니다.
이 쿼리를 Northwind 샘플 데이터베이스에 대해 실행하면 64942.6900이 출력됩니다.
Dim totalFreight = Aggregate ord In db.Orders _
Into Sum(ord.Freight)
Console.WriteLine(totalFreight)
System.Nullable<Decimal> totalFreight =
(from ord in db.Orders
select ord.Freight)
.Sum();
Console.WriteLine(totalFreight);
다음 예제에서는 모든 주문에 대한 총 단위 수를 검색합니다.
이 쿼리를 Northwind 샘플 데이터베이스에 대해 실행하면 780이 출력됩니다.
Sum에는 short 형식에 대한 오버로드가 없으므로 short 형식(예: UnitsOnOrder)을 캐스팅해야 합니다.
Dim totalUnitsOnOrder = Aggregate prod In db.Products _
Into Sum(prod.UnitsOnOrder)
Console.WriteLine(totalUnitsOnOrder)
System.Nullable<long> totalUnitsOnOrder =
(from prod in db.Products
select (long)prod.UnitsOnOrder)
.Sum();
Console.WriteLine(totalUnitsOnOrder);