【初心者向け】C#のLINQ Whereメソッドの使い方を徹底解説!条件に合う要素を抽出する方法
C# LINQのWhereメソッドとは?
C#のLINQに用意されているWhereメソッドは、指定した条件(述語:Predicate)に基づいて、コレクションや配列の中から該当する要素だけを抽出(フィルタリング)するためのメソッドです。
データの一覧から特定の条件を満たす項目のみを取り出したい場面は開発現場で非常に多く、WhereメソッドはLINQの中でも特に使用頻度の高い機能といえます。
例えば、以下のように記述すると「70以上の要素」だけを取得できます。
Where((n, index) => n >= 70);
このラムダ式では、各要素 n が70以上であるかどうかを判定し、条件を満たす要素のみを結果として返します。
Whereメソッドのサンプルコード
それでは、実際に整数型の配列から70以上の要素を抽出するサンプルを見てみましょう。
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
int[] arr = { 10, 30, 20, 15, 90, 85, 40, 75 };
Console.WriteLine("Array:");
foreach (int a in arr)
Console.WriteLine(a);
// 70以上の要素を取得
IEnumerable<int> myQuery = arr.AsQueryable().Where((n, index) => n >= 70);
Console.WriteLine("Elements above 70...:");
foreach (int res in myQuery)
Console.WriteLine(res);
}
}
コードのポイント
AsQueryable()を使うことで、配列に対してインデックス付きのラムダ式(n, index) =>を利用できます。nには配列の各要素が、indexにはその位置(添字)が順番に渡されます。- 結果は
IEnumerable<int>として返されるため、foreachループで1つずつ取り出して表示できます。
実行結果(出力)
上記のプログラムを実行すると、以下のような結果が出力されます。
Array: 10 30 20 15 90 85 40 75 Elements above 70...: 90 85 75
元の配列には8つの要素がありますが、条件「70以上」を満たすのは 90、85、75 の3つだけであることが確認できます。
まとめ
LINQのWhereメソッドを使えば、複雑なfor文やif文を書かなくても、わずか1行のラムダ式でコレクションの絞り込みが可能です。条件式を変えれば「〜以下」「文字列に含まれる」など、さまざまなフィルタリングに応用できるため、ぜひマスターしておきましょう。
-
C#のLINQで複数のWhere句を使ってコレクションをフィルタリングする方法
C#では、Where句を使用することで、コレクション内の要素を簡単にフィルタリングできます。そして、LINQのクエリ式1つの中には、複数のWhere句を記述することも可能です。複数のWhere句の基本通常、複数の条件を組み合わせる場合は「&&」演算子を使って1つのWhere句にまとめることが一般的ですが、Where句を連続して記述しても同じ結果が得られます。各Where句は上から順に適用され、前の条件を通過した要素に対して次の条件が評価されていく仕組みです。サンプルデータの準備まずは、Employeeオブジェクトのコレクションを作成します。IList<Employee&g
-
C# LINQ Distinct()メソッドでリストから重複要素を削除する方法
C#のLINQで重複しない要素(一意の値)だけを取得したい場合は、Distinct()メソッドを使用します。このメソッドは、シーケンス内の重複する要素を取り除き、各要素を1度だけ返してくれます。 重複要素を含むリストの準備 まずは、重複した要素を含むリストを用意しましょう。 List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 }; このリストには「5」と「30」がそれぞれ2回含まれています。 Distinct()メソッドで重複を除去する 重複を除いた要素を取得するには、次のように