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

C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証

C#のLINQでAny・Allなど条件確認メソッドの使い方
C#のLINQでAny・Allなど条件確認メソッドの使い方

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

生徒

「先生、コレクションの中に条件に合うデータがあるかどうか調べる方法ってありますか?」

先生

「はい、C#のLINQには、Any・Allといった条件確認メソッドがあります。これらを使うと、データの存在チェックや全体の検証が簡単にできますよ。」

生徒

「具体的にはどんな場面で使うんですか?」

先生

「例えば、商品リストの中に在庫切れの商品があるか調べたり、全員が合格点を取っているか確認したりする場面で役立ちます。それでは、基本的な使い方を見ていきましょう!」

1. 条件確認メソッドとは?

1. 条件確認メソッドとは?
1. 条件確認メソッドとは?

C#のLINQ(リンク)には、コレクション(配列やリストなど)の中のデータが特定の条件を満たしているかどうかを確認するための便利なメソッドがあります。これらを条件確認メソッドと呼びます。主なメソッドには以下のようなものがあります。

  • Any:条件を満たす要素が一つでもあるかを確認
  • All:すべての要素が条件を満たしているかを確認
  • Contains:特定の値が含まれているかを確認

これらのメソッドは、データの検証やチェック処理を行う際に非常に便利です。例えば、「未成年のユーザーがいるか」「全員が合格点を取っているか」といった判定が簡単に行えます。

2. Anyメソッドの使い方

2. Anyメソッドの使い方
2. Anyメソッドの使い方

Anyメソッドは、コレクションの中に条件を満たす要素が一つでもあればtrueを返します。逆に、一つもなければfalseを返します。これは「存在チェック」を行うときに使います。

基本的な使い方

まず、Anyメソッドの基本的な使い方を見てみましょう。以下の例では、数値のリストの中に50より大きい数があるかどうかを調べています。


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

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 10, 25, 30, 45, 60 };
        
        // 50より大きい数があるか確認
        bool hasLargeNumber = numbers.Any(n => n > 50);
        
        if (hasLargeNumber)
        {
            Console.WriteLine("50より大きい数が存在します。");
        }
        else
        {
            Console.WriteLine("50より大きい数は存在しません。");
        }
    }
}

実行結果:


50より大きい数が存在します。

この例では、numbers.Any(n => n > 50)という書き方をしています。これは「numbersリストの中に、nという要素でnが50より大きいものがあるか」という意味です。リストには60という数値があるため、結果はtrueになります。

条件なしのAnyメソッド

Anyメソッドは条件を指定せずに使うこともできます。この場合、コレクションに要素が一つでもあればtrueを返します。つまり、「空でないか」を確認できます。


List<string> fruits = new List<string> { "りんご", "バナナ", "みかん" };
List<string> emptyList = new List<string>();

Console.WriteLine("fruitsに要素がある: " + fruits.Any());  // True
Console.WriteLine("emptyListに要素がある: " + emptyList.Any());  // False

実行結果:


fruitsに要素がある: True
emptyListに要素がある: False

3. Allメソッドの使い方

3. Allメソッドの使い方
3. Allメソッドの使い方

Allメソッドは、コレクションのすべての要素が条件を満たしている場合にtrueを返します。一つでも条件を満たさない要素があれば、falseを返します。全体の検証に使います。

全員が条件を満たすか確認

以下の例では、テストの点数リストで全員が60点以上かどうかを確認しています。


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

class Program
{
    static void Main()
    {
        List<int> scores = new List<int> { 75, 82, 68, 91, 85 };
        
        // 全員が60点以上か確認
        bool allPassed = scores.All(s => s >= 60);
        
        if (allPassed)
        {
            Console.WriteLine("全員が合格点を取っています。");
        }
        else
        {
            Console.WriteLine("合格点に達していない人がいます。");
        }
    }
}

実行結果:


全員が合格点を取っています。

この例では、すべての点数が60以上なので、allPassedはtrueになります。もし一人でも60点未満の人がいれば、falseになります。

Allメソッドで不合格者がいる場合


List<int> scores2 = new List<int> { 75, 82, 55, 91, 85 };

bool allPassed2 = scores2.All(s => s >= 60);

Console.WriteLine("全員合格: " + allPassed2);  // False

実行結果:


全員合格: False

この場合、55点という60点未満の点数があるため、結果はfalseになります。

4. Containsメソッドの使い方

4. Containsメソッドの使い方
4. Containsメソッドの使い方

Containsメソッドは、コレクションの中に特定の値が含まれているかを確認します。AnyやAllとは異なり、条件式ではなく具体的な値を指定します。


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

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string> { "りんご", "バナナ", "みかん", "いちご" };
        
        // "バナナ"が含まれているか確認
        bool hasBanana = fruits.Contains("バナナ");
        
        if (hasBanana)
        {
            Console.WriteLine("バナナがあります。");
        }
        else
        {
            Console.WriteLine("バナナはありません。");
        }
        
        // "メロン"が含まれているか確認
        bool hasMelon = fruits.Contains("メロン");
        Console.WriteLine("メロンがある: " + hasMelon);
    }
}

実行結果:


バナナがあります。
メロンがある: False

Containsメソッドは、リストに「バナナ」という文字列が存在するため、trueを返します。一方、「メロン」は存在しないため、falseを返します。

5. 実践的な使用例

5. 実践的な使用例
5. 実践的な使用例

ここでは、より実践的な例として、商品管理システムを想定したコードを見てみましょう。商品クラスを作成し、在庫状況を確認します。


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

// 商品クラス
class Product
{
    public string Name { get; set; }
    public int Stock { get; set; }
    public decimal Price { get; set; }
}

class Program
{
    static void Main()
    {
        List<Product> products = new List<Product>
        {
            new Product { Name = "ノートパソコン", Stock = 5, Price = 80000 },
            new Product { Name = "マウス", Stock = 0, Price = 1500 },
            new Product { Name = "キーボード", Stock = 10, Price = 3000 },
            new Product { Name = "モニター", Stock = 3, Price = 25000 }
        };
        
        // 在庫切れの商品があるか確認
        bool hasOutOfStock = products.Any(p => p.Stock == 0);
        Console.WriteLine("在庫切れ商品がある: " + hasOutOfStock);
        
        // すべての商品が在庫ありか確認
        bool allInStock = products.All(p => p.Stock > 0);
        Console.WriteLine("全商品に在庫がある: " + allInStock);
        
        // 10万円以上の商品があるか確認
        bool hasExpensive = products.Any(p => p.Price >= 100000);
        Console.WriteLine("10万円以上の商品がある: " + hasExpensive);
        
        // すべての商品が5000円以下か確認
        bool allCheap = products.All(p => p.Price <= 5000);
        Console.WriteLine("全商品が5000円以下: " + allCheap);
    }
}

実行結果:


在庫切れ商品がある: True
全商品に在庫がある: False
10万円以上の商品がある: False
全商品が5000円以下: False

この例では、商品リストに対して複数の条件確認を行っています。マウスの在庫が0なので、在庫切れ商品があることが分かります。また、すべての商品に在庫があるわけではないことも確認できます。

6. AnyとAllの組み合わせ

6. AnyとAllの組み合わせ
6. AnyとAllの組み合わせ

AnyとAllメソッドを組み合わせることで、より複雑な条件チェックも可能です。例えば、「特定の条件を満たすグループがあるか」といった判定ができます。


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

class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<int> TestScores { get; set; }
}

class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "太郎", Age = 20, TestScores = new List<int> { 80, 75, 90 } },
            new Student { Name = "花子", Age = 19, TestScores = new List<int> { 65, 70, 68 } },
            new Student { Name = "次郎", Age = 21, TestScores = new List<int> { 95, 88, 92 } }
        };
        
        // すべてのテストで80点以上を取った生徒がいるか
        bool hasExcellent = students.Any(s => s.TestScores.All(score => score >= 80));
        Console.WriteLine("全テスト80点以上の生徒がいる: " + hasExcellent);
        
        // 20歳以上の生徒がいるか
        bool hasAdult = students.Any(s => s.Age >= 20);
        Console.WriteLine("20歳以上の生徒がいる: " + hasAdult);
    }
}

実行結果:


全テスト80点以上の生徒がいる: True
20歳以上の生徒がいる: True

この例では、太郎と次郎のテストスコアがすべて80点以上なので、条件を満たす生徒がいることが分かります。Anyの中でAllを使うことで、「すべてのテストで80点以上を取った生徒が一人でもいるか」という複雑な条件を簡単に表現できます。

7. 注意点とポイント

7. 注意点とポイント
7. 注意点とポイント

空のコレクションでの動作

空のコレクション(要素が一つもないリストや配列)に対してAnyやAllを使う場合、注意が必要です。

  • Any:空のコレクションに対しては常にfalseを返します
  • All:空のコレクションに対しては常にtrueを返します(すべての要素が条件を満たす=要素がないので矛盾なし)

List<int> emptyList = new List<int>();

bool anyResult = emptyList.Any(n => n > 0);
bool allResult = emptyList.All(n => n > 0);

Console.WriteLine("Any結果: " + anyResult);  // False
Console.WriteLine("All結果: " + allResult);  // True

パフォーマンスについて

Anyメソッドは条件を満たす要素が見つかった時点で処理を終了します。そのため、大量のデータを扱う場合でも効率的です。Allメソッドも同様に、条件を満たさない要素が見つかった時点で処理を終了します。

カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.7
Java&Spring記事人気No7
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決