【C#】LINQのWhereメソッドについて解説

LINQは、C#や他の.NET言語でデータ操作を効率的に行うための便利な機能です。LINQを使うことで、SQLのようなクエリ構文を使ってコレクションやデータベースのデータを簡単に操作できます。その中でも「Where」メソッドは、特定の条件に基づいてデータをフィルタリングする際に非常に便利です。

例えば、リストや配列の中から条件に合った要素だけを抽出する場合、Whereメソッドを使うことで簡単に表現できます。このブログでは、LINQのWhereメソッドの基本的な使い方から、複数条件の指定方法、オブジェクトのフィルタリングまで、実際のコード例を交えて解説します。

Whereメソッドの基本的な使い方

LINQのWhereメソッドは、コレクションから特定の条件に一致する要素をフィルタリングするために使います。Whereメソッドの基本的な構文は非常にシンプルで、条件を満たす要素のみを抽出することが可能です。

基本構文

Whereメソッドは、コレクションに対してラムダ式を使って条件を指定し、その条件に一致する要素を返します。基本構文は次の通りです。

var result = collection.Where(item => 条件);

例として、数値の配列から偶数のみを抽出する例を見てみましょう。

int[] numbers = { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0);

この例では、numbers 配列の中から、n % 2 == 0n % 2 == 0 という条件に基づいて偶数のみがフィルタリングされ、evenNumbers に抽出された偶数が格納されます。

結果の確認

Whereメソッドを使った後、結果を確認するには、例えば次のようにforeach 文を使って出力することができます。

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

このコードを実行すると、実行結果に2、4、6という偶数が表示されます。このように、Whereメソッドを使うことで、簡単にフィルタリングが可能です。

基本構文で出てきたラムダ式について詳しく知りたい方は、こちらの記事が参考になります。

複数条件でのフィルタリング

Whereメソッドの便利な機能の一つは、複数の条件を組み合わせてフィルタリングを行える点です。これにより、より複雑な条件でデータを抽出することができます。条件は、論理演算子を使って組み合わせることができます。

AND条件の使用

AND条件(&&)を使うと、すべての条件を満たす要素のみをフィルタリングできます。例えば、次の例では、年齢が18歳以上かつ50歳未満の人を抽出しています。

var filtered = collection.Where(item => item.Age >= 18 && item.Age < 50);

このコードでは、Age プロパティが18以上かつ50未満の要素のみが返されます。&& を使うことで、両方の条件を満たす要素だけを簡単に取得できます。

OR条件の使用

一方、OR条件(||)を使うことで、いずれかの条件を満たす要素をフィルタリングできます。次の例では、年齢が18歳未満または50歳以上の人を抽出しています。

var filtered = collection.Where(item => item.Age < 18 || item.Age >= 50);

この場合、年齢が18未満または50以上の人が抽出されます。OR条件を使うことで、どちらか一方の条件を満たす要素を取得することができます。

オブジェクトを扱うWhereメソッドの使い方

Whereメソッドは、数値や文字列だけでなく、オブジェクトのコレクションでも活用できます。オブジェクトのプロパティに基づいてフィルタリングを行うことで、複雑なデータセットから必要な情報を抽出することが可能です。

オブジェクトのフィルタリング例

例えば、Person クラスのオブジェクトリストがあり、それぞれのオブジェクトが「名前」と「年齢」というプロパティを持っている場合を考えます。このリストから、年齢が30歳以上の人を抽出するコードは次のようになります。

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> people = new List<Person>
{
    new Person { Name = "John", Age = 25 },
    new Person { Name = "Jane", Age = 30 },
    new Person { Name = "Tom", Age = 40 }
};

var adults = people.Where(p => p.Age >= 30);

この例では、Person オブジェクトのリストから Age プロパティが30歳以上の人のみを抽出しています。結果として、「Jane」と「Tom」が抽出されます。

複数プロパティを使ったフィルタリング

複数のプロパティに基づいてフィルタリングを行うことも可能です。例えば、名前が「John」で、かつ年齢が25歳以上の人を抽出する場合は次のように記述します。

var specificPerson = people.Where(p => p.Name == "John" && p.Age >= 25);

このコードでは、Name プロパティが「John」であり、かつ Age プロパティが25歳以上の条件を両方満たすオブジェクトを抽出します。複数の条件を組み合わせることで、より細かいフィルタリングが実現できます。

オブジェクトリストのフィルタリング結果を表示

Whereメソッドを使ってフィルタリングした結果を確認するには、例えば次のようにforeach 文を使って表示できます。

foreach (var person in adults)
{
    Console.WriteLine($"{person.Name}, Age: {person.Age}");
}

これを実行すると、「Jane, Age:30」と「Tom, Age:40」という結果が表示されます。

まとめ

LINQのWhereメソッドは、コレクションやデータベースのデータをフィルタリングするために非常に便利なツールです。シンプルな構文で特定の条件に基づいてデータを抽出できるため、コードの可読性が向上し、複雑なデータ操作を簡素化できます。

この記事で紹介した基本的な使い方を活用すれば、Whereメソッドを使ったデータ操作がより直感的なものになるでしょう。

LINQの機能の理解が深まりましたら幸いです。

コメント