カテゴリ: C# 更新日: 2026/01/28

C#のLINQ集計メソッド完全ガイド!Count・Sumの使い方を初心者向けに解説

C#のLINQでCount・Sumなど集計メソッドの基本
C#のLINQでCount・Sumなど集計メソッドの基本

先生と生徒の会話形式で理解しよう

生徒

「C#でデータの合計や件数を簡単に計算する方法ってありますか?」

先生

「はい、LINQの集計メソッドを使えば、データの合計や件数を簡単に計算できますよ。」

生徒

「具体的にはどんなメソッドがあるんですか?」

先生

「Count、Sum、Average、Max、Minなどがあります。それでは、基本的な使い方を見ていきましょう!」

1. LINQの集計メソッドとは?

1. LINQの集計メソッドとは?
1. LINQの集計メソッドとは?

C#のLINQ(リンク)には、データを集計するための便利なメソッドが用意されています。これらの集計メソッドを使うと、配列やリストなどのコレクションに対して、合計や平均、最大値などを簡単に計算できます。

例えば、クラスの生徒の点数が入った配列があったとします。この点数の合計を計算したいとき、従来なら繰り返し処理を書いて一つずつ足し算していく必要がありました。しかし、LINQの集計メソッドを使えば、たった一行のコードで合計が計算できるのです。

主な集計メソッドには、以下のようなものがあります。

  • Count():データの個数を数える
  • Sum():データの合計を計算する
  • Average():データの平均を計算する
  • Max():データの最大値を取得する
  • Min():データの最小値を取得する

2. Count()メソッド:データの個数を数える

2. Count()メソッド:データの個数を数える
2. Count()メソッド:データの個数を数える

Count()メソッドは、配列やリストなどのコレクションに含まれる要素の個数を数えるメソッドです。例えば、買い物リストに何個の商品があるかを数えたいときなどに使います。

基本的な使い方

まずは、単純に配列の要素数を数える例を見てみましょう。


using System;
using System.Linq;

int[] numbers = { 10, 20, 30, 40, 50 };
int count = numbers.Count();

Console.WriteLine($"要素の個数: {count}");

このコードでは、numbersという配列に5つの数値が入っています。Count()メソッドを使うことで、配列内の要素数を取得できます。


要素の個数: 5

条件付きでカウントする

Count()メソッドには、条件を指定することもできます。例えば、「50より大きい数値がいくつあるか」を数えることができます。


using System;
using System.Linq;

int[] numbers = { 10, 20, 60, 40, 80, 30 };
int count = numbers.Count(n => n > 50);

Console.WriteLine($"50より大きい数値の個数: {count}");

ここで使っているn => n > 50は、ラムダ式と呼ばれる書き方で、「nが50より大きい」という条件を表しています。この条件に一致する要素だけを数えることができます。


50より大きい数値の個数: 2

3. Sum()メソッド:データの合計を計算する

3. Sum()メソッド:データの合計を計算する
3. Sum()メソッド:データの合計を計算する

Sum()メソッドは、配列やリストに含まれる数値の合計を計算するメソッドです。例えば、一週間の売上データから合計売上を計算したいときなどに使います。

基本的な使い方

数値の配列の合計を計算する例を見てみましょう。


using System;
using System.Linq;

int[] sales = { 1000, 1500, 2000, 1200, 1800 };
int total = sales.Sum();

Console.WriteLine($"合計売上: {total}円");

このコードでは、salesという配列に5日分の売上が入っています。Sum()メソッドを使うことで、これらの合計を一行で計算できます。


合計売上: 7500円

オブジェクトのプロパティを合計する

実際の開発では、単純な数値の配列だけでなく、クラスのオブジェクトが入ったリストを扱うことも多くあります。例えば、商品クラスのリストから価格の合計を計算する場合を見てみましょう。


using System;
using System.Linq;
using System.Collections.Generic;

class Product
{
    public string Name { get; set; }
    public int Price { get; set; }
}

class Program
{
    static void Main()
    {
        List<Product> products = new List<Product>
        {
            new Product { Name = "りんご", Price = 150 },
            new Product { Name = "バナナ", Price = 100 },
            new Product { Name = "みかん", Price = 80 }
        };

        int totalPrice = products.Sum(p => p.Price);
        Console.WriteLine($"商品の合計金額: {totalPrice}円");
    }
}

ここでは、Productクラスを作成し、商品名と価格を持たせています。Sum()メソッドにラムダ式p => p.Priceを渡すことで、各商品の価格プロパティを合計しています。


商品の合計金額: 330円

4. Average()メソッド:データの平均を計算する

4. Average()メソッド:データの平均を計算する
4. Average()メソッド:データの平均を計算する

Average()メソッドは、データの平均値を計算するメソッドです。テストの点数の平均や、月間の平均売上などを計算するときに使います。


using System;
using System.Linq;

int[] scores = { 80, 75, 90, 85, 70 };
double average = scores.Average();

Console.WriteLine($"平均点: {average}点");

このコードでは、5人のテストの点数から平均点を計算しています。Average()メソッドは、合計を個数で割った値を返します。戻り値の型はdouble(小数を含む数値型)になります。


平均点: 80点

5. Max()とMin()メソッド:最大値と最小値を取得する

5. Max()とMin()メソッド:最大値と最小値を取得する
5. Max()とMin()メソッド:最大値と最小値を取得する

Max()メソッドはデータの中から最大値を、Min()メソッドは最小値を取得するメソッドです。例えば、売上データから最高売上と最低売上を見つけたいときなどに使います。


using System;
using System.Linq;

int[] temperatures = { 25, 30, 22, 28, 35, 20 };
int maxTemp = temperatures.Max();
int minTemp = temperatures.Min();

Console.WriteLine($"最高気温: {maxTemp}度");
Console.WriteLine($"最低気温: {minTemp}度");

このコードでは、一週間の気温データから最高気温と最低気温を取得しています。Max()で最大値、Min()で最小値を簡単に取得できます。


最高気温: 35度
最低気温: 20度

6. 複数の集計メソッドを組み合わせる

6. 複数の集計メソッドを組み合わせる
6. 複数の集計メソッドを組み合わせる

実際の開発では、複数の集計メソッドを組み合わせて使うことがよくあります。例えば、売上データから合計、平均、最大値、最小値をまとめて計算する場合を見てみましょう。


using System;
using System.Linq;

int[] dailySales = { 15000, 18000, 12000, 20000, 16000, 22000, 14000 };

int total = dailySales.Sum();
double average = dailySales.Average();
int max = dailySales.Max();
int min = dailySales.Min();
int count = dailySales.Count();

Console.WriteLine($"売上件数: {count}日");
Console.WriteLine($"合計売上: {total}円");
Console.WriteLine($"平均売上: {average}円");
Console.WriteLine($"最高売上: {max}円");
Console.WriteLine($"最低売上: {min}円");

このように、一つのデータに対して複数の集計メソッドを使うことで、さまざまな角度からデータを分析できます。これは、売上レポートや成績表などを作成するときに非常に便利です。


売上件数: 7日
合計売上: 117000円
平均売上: 16714.285714285714円
最高売上: 22000円
最低売上: 12000円

7. 空のコレクションを扱うときの注意点

7. 空のコレクションを扱うときの注意点
7. 空のコレクションを扱うときの注意点

集計メソッドを使うときに注意が必要なのは、空のコレクション(要素が一つもない配列やリスト)を扱う場合です。空のコレクションに対してAverage()Max()Min()を使うと、エラーが発生します。


using System;
using System.Linq;

int[] emptyArray = { };

// Count()とSum()は問題なし
int count = emptyArray.Count();  // 結果: 0
int sum = emptyArray.Sum();      // 結果: 0

Console.WriteLine($"個数: {count}");
Console.WriteLine($"合計: {sum}");

// Average(), Max(), Min()は要素がないとエラーになる
// double avg = emptyArray.Average();  // エラー!

空のコレクションを扱う可能性がある場合は、まずCount()Any()メソッドで要素があるかを確認してから集計メソッドを使うと安全です。


個数: 0
合計: 0

8. 実践的な例:学生の成績管理

8. 実践的な例:学生の成績管理
8. 実践的な例:学生の成績管理

最後に、LINQの集計メソッドを使った実践的な例として、学生の成績を管理するプログラムを作成してみましょう。


using System;
using System.Linq;
using System.Collections.Generic;

class Student
{
    public string Name { get; set; }
    public int Score { get; set; }
}

class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "田中", Score = 85 },
            new Student { Name = "佐藤", Score = 92 },
            new Student { Name = "鈴木", Score = 78 },
            new Student { Name = "高橋", Score = 88 },
            new Student { Name = "渡辺", Score = 95 }
        };

        int studentCount = students.Count();
        int totalScore = students.Sum(s => s.Score);
        double averageScore = students.Average(s => s.Score);
        int highestScore = students.Max(s => s.Score);
        int lowestScore = students.Min(s => s.Score);
        int passCount = students.Count(s => s.Score >= 80);

        Console.WriteLine("===== 成績レポート =====");
        Console.WriteLine($"学生数: {studentCount}人");
        Console.WriteLine($"合計点: {totalScore}点");
        Console.WriteLine($"平均点: {averageScore}点");
        Console.WriteLine($"最高点: {highestScore}点");
        Console.WriteLine($"最低点: {lowestScore}点");
        Console.WriteLine($"80点以上: {passCount}人");
    }
}

このプログラムでは、学生のクラスを作成し、名前と点数を管理しています。さまざまな集計メソッドを組み合わせることで、総合的な成績レポートを作成できます。条件付きのCount()を使えば、特定の点数以上の学生数も簡単に数えられます。


===== 成績レポート =====
学生数: 5人
合計点: 438点
平均点: 87.6点
最高点: 95点
最低点: 78点
80点以上: 4人
カテゴリの一覧へ
新着記事
New1
C#
C#の列挙型(enum)とは?定義方法と活用例を初心者向けに解説
New2
COBOL
COBOLの帳票をデジタル化!電子帳票化(PDF出力・外部ツール活用)への移行例
New3
C#
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
New4
C#
C#のオーバーライド(override)の基本と使い方を解説
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.5
Java&Spring記事人気No5
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.6
Java&Spring記事人気No6
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.7
Java&Spring記事人気No7
C#
C#のプロパティとは?get/setアクセサの書き方と使い分け
No.8
Java&Spring記事人気No8
COBOL
COBOLのMOVE文を完全ガイド!初心者でもわかるデータ移送の基本