C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
生徒
「大量にあるデータの中から、特定の条件に合うものだけを取り出したいときはどうすればいいですか?」
先生
「そんなときはC#の『LINQ(リンク)』という機能の中にある『Where(ウェア)句』を使うと、驚くほど簡単に抽出できますよ。」
生徒
「Whereって、英語で『どこ』っていう意味ですよね。データがどこにあるか探すようなイメージでしょうか?」
先生
「その通りです!『この条件に当てはまるデータはどこかな?』と探して絞り込む機能です。さっそく使い方をマスターしましょう!」
1. LINQのWhere句とは?データの「ふるい分け」をマスターしよう
プログラミングをしていると、「100点以上のテスト結果だけを選びたい」「名簿の中から『佐藤さん』だけを探したい」という場面がよくあります。パソコンを触ったことがない方でも、料理で使う「ザル」や「ふるい」を想像してみてください。大きな粒と小さな粒が混ざった中から、特定の大きさのものだけを残す作業。これがプログラミングの世界での「フィルタリング(条件絞り込み)」です。
C#というプログラミング言語には、このフィルタリングを魔法のように短い命令で実現するLINQ(Language Integrated Query:言語統合クエリ)という仕組みがあります。その中でも一番よく使われるのが、今回の主役であるWhere(ウェア)句です。
これを使わない場合、一つひとつのデータを手作業で確認するような面倒な命令を書く必要がありますが、LINQのWhere句を使えば、「これこれこういう条件のデータを持ってきて!」と一行書くだけで済んでしまいます。非常に効率的で、読みやすいプログラムを書くための必須スキルと言えるでしょう。
2. Where句を使うための準備「コレクション」について
Where句を使うには、まず「データの集まり」が必要です。専門用語ではこれを「コレクション」と呼びます。例えば、数字が詰まった箱や、果物の名前が書かれたリストのようなものです。C#では「配列」や「List(リスト)」といった形式でこれらを管理します。
イメージとしては、スーパーの買い物カゴを思い浮かべてください。カゴの中にはリンゴ、バナナ、イチゴなどが入っています。この「カゴ全体」がコレクションです。Where句は、このカゴの中から「赤い果物だけを取り出す」といった命令を出すために使います。このように、データの集まりに対して特定のルールを適用して、新しいリストを作るのがLINQの基本的な流れになります。
3. Where句の基本構文と「ラムダ式」
実際にコードを書くときに避けて通れないのが「ラムダ式」という書き方です。名前は難しそうですが、意味はシンプルです。ラムダ式は「もし変数 x が 〇〇 だったら」という条件を書くための専用の記号 =>(アロー演算子と呼びます)を使った書き方です。
例えば、x => x > 10 と書いた場合、「データ x が 10より大きいとき」という条件を指定していることになります。Where句はこのラムダ式とセットで使うことで、「リストの中にあるすべての要素を一つずつ x に当てはめて、条件に合うかチェックしてね」という指示をパソコンに伝えます。
ここで重要なのは、Where句を使っても「元のリスト」は壊れないということです。条件に合ったものだけをコピーして集めた「新しい結果」を返してくれるので、安心してデータを操作することができます。
4. 実践!数値データを絞り込むプログラム
それでは、具体的なC#のプログラムコードを見てみましょう。ここでは、1から10までの数字が入ったリストから、5より大きい数字だけを取り出してみます。
using System;
using System.Collections.Generic;
using System.Linq; // LINQを使うために必要な魔法の言葉です
class Program
{
static void Main()
{
// 1から10までの数字のリストを作成します
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Where句を使って、5より大きい数字だけを絞り込みます
// 「n => n > 5」は「数字 n が 5より大きい場合」という意味です
var filteredNumbers = numbers.Where(n => n > 5);
Console.WriteLine("5より大きい数字を表示します:");
// 絞り込んだ結果を一つずつ表示します
foreach (var n in filteredNumbers)
{
Console.WriteLine(n);
}
}
}
実行結果は以下のようになります。
5より大きい数字を表示します:
6
7
8
9
10
このように、複雑な繰り返し処理(ループ)を書かなくても、Whereを使うだけでスマートに条件に一致するデータを抽出できました。ここで登場した var というキーワードは、パソコンに「中身を見て型を自動的に判断してね」とお願いする便利な書き方です。初心者の方は「どんな種類のデータでも入れられる魔法の変数」と考えておけば大丈夫です。
5. 文字列データの絞り込みに挑戦!
数値だけでなく、文字(文字列)の絞り込みも非常に簡単です。例えば、果物の名前が入ったリストから、特定の文字を含んでいるものだけを探してみましょう。ここでは、文字の長さが5文字以上の果物だけを抽出してみます。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// 果物のリストを作成
List<string> fruits = new List<string> { "りんご", "バナナ", "パイナップル", "いちご", "メロン", "マスカット" };
// 文字の長さが4文字より大きい(5文字以上)ものだけを抽出
// 「f => f.Length > 4」は「果物の文字数が4を超える場合」という意味です
var longFruits = fruits.Where(f => f.Length > 4);
Console.WriteLine("名前が長い果物リスト:");
foreach (var f in longFruits)
{
Console.WriteLine(f);
}
}
}
実行結果は以下のようになります。
名前が長い果物リスト:
パイナップル
マスカット
このプログラムでは、各データの「文字数(Length)」をチェックしています。このように、データが持っている情報(プロパティ)を使って、自由自在にフィルタリングができるのがWhere句の強みです。検索フォームでキーワードを入力して検索するような機能も、裏側ではこのような仕組みが動いていることが多いのです。
6. 複数の条件を組み合わせてみよう
「〇〇かつ△△」といった、より詳細な条件で絞り込みたいときもありますよね。例えば「10より大きくて、さらに偶数(2で割り切れる数)のもの」といった具合です。LINQでは、ラムダ式の中で「&&(かつ)」や「||(または)」という記号を使うことで、複数の条件を一度に指定できます。
プログラミング未経験の方にとって、「&&」は少し奇妙に見えるかもしれませんが、これは英語の「AND」と同じ役割をします。二つの条件がどちらも「正しい(真)」ときだけ、そのデータが選ばれるようになります。一方、「||」は「OR」を意味し、どちらか片方の条件さえ満たしていれば選ばれます。
条件を細かく設定できるようになると、膨大なデータの中からたった一つの正解を見つけ出すような高度なプログラムも作れるようになります。例えば、ネットショップの商品検索で「価格が1000円以下」かつ「在庫があるもの」といった絞り込みがこれに当たります。Where句をマスターすることは、実用的なアプリ開発への第一歩なのです。
7. LINQを使う上での注意点とメソッドチェーン
Where句を使うときに知っておくと役立つ知識が「メソッドチェーン」です。これは、ドット(.)で命令を数珠つなぎにしていく書き方のことです。例えば、Whereで絞り込んだ直後に、別の命令をくっつけることができます。今回は詳しく触れませんが、データを並び替える OrderBy などと一緒に使われることが多いです。
また、一つだけ注意が必要なのが、Where句を書いた瞬間には、まだ実際の計算(絞り込み作業)は行われていないという点です。これを「遅延実行」と呼びます。実際にデータの中身を見ようとしたとき(例えば foreach で表示しようとしたときなど)に、初めて計算が始まります。これは、無駄な計算を減らしてパソコンのメモリを節約するための賢い仕組みなのですが、最初は「Whereを書いたらその場で結果が確定するわけではない」ということを頭の片隅に置いておくだけで十分です。
さらに、Where句で何も見つからなかった場合はどうなるでしょうか?その場合は、エラーになるのではなく、「空っぽのリスト」が返ってきます。つまり、誰もいない部屋を渡されるような状態です。プログラムが止まってしまう心配が少ないのも、LINQが初心者におすすめされる理由の一つです。
8. Where句を使いこなすためのヒント
これからC#の学習を進めていく中で、データベースから情報を取得したり、ユーザーが入力した値を整理したりすることが増えていきます。そのすべての中心にあるのが、このデータの選別作業です。Where句は単なる機能ではなく、プログラミングにおける思考そのものをシンプルにしてくれる道具です。
まずは小さなリストを作って、いろいろな条件を試してみてください。「数字が3の倍数のとき」「文字が『あ』で始まるとき」など、遊び感覚で条件を書き換えてみるのが上達の近道です。パソコン操作に慣れていない方でも、一度この「条件に合うものだけが出てくる快感」を味わえば、プログラミングがどんどん楽しくなっていくはずです。