C#のLINQでよく見かけるメソッドについて復習だ。


はじめに

こんにちは。

突然ですが、C#のLINQでよく見かけると思うメソッドを3つ、頭に思い浮かべてみてください。

筆者はSelectメソッド, Whereメソッド, FirstOrDefaultメソッドだと思うのです。
ということで本記事ではこれら3つのメソッドについて簡単なサンプルをご紹介。

Selectメソッド

やっぱり最初はSelectメソッドじゃない?
Selectメソッドの効果は加工や変形です。あえて数学っぽい言葉で言うなら射影か。

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] a = { 1, 2, 3, 4, 5 };
        var result = a.Select(c => c + 3);

        foreach (var item in result) Console.WriteLine(item);

        Console.Read();
    }
}

この例では、配列のアイテムひとつひとつに対してc => c + 3してます。
ちなみにConsole.Read();とあるけど、これは結果画面を閉じずに待機したかっただけなので気にしないで。
実行結果は…

ちゃんと全部 3 が足されてます。

Whereメソッド

Whereメソッドは条件に合うやつだけを絞り込む、つまりフィルタリングですね。

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] a = { 1, 2, 3, 4, 5 };
        var result = a.Where(c => c >= 3);

        foreach (var item in result) Console.WriteLine(item);

        Console.Read();
    }
}

配列のアイテムからc => c >= 3という条件を満たすものだけを取り出しています。
なんか形が似てるけど、=>はラムダ式の記号で、>=は不等号(≧)よね。
実行結果は…

3以上のアイテムだけが取り出されました。

FirstOrDefaultメソッド

これも個人的にはよく見かけるメソッドだと思うのです。
ファーストまたはデフォルト。つまり最初のアイテムを返すけど該当アイテムがなかったら既定値を返すよという、とても賢い子。
該当アイテムがなかったら例外をぶん投げてしまうFirstメソッドよりたぶん便利。

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] a = { 1, 2, 3, 4, 5 };
        var result = a.FirstOrDefault(c => c >= 3);

        Console.WriteLine(result);

        Console.Read();
    }
}

実行結果は…

たしかにc => c >= 3という条件を満たすアイテムのうち、最初に見つかるのは 3 。
ちなみにもし見つからなかったら、今回はint型なので既定値 0 が出力されます。

まとめ

Selectメソッドは加工、変形、射影。
Whereメソッドはフィルタリング。
FirstOrDefaultメソッドは最初のアイテムを取り出すけど見つからなかったら既定値。

LINQのメソッドはたくさんあって全ては覚えられないけど、有名なところだけでもしっかり使い方をおさえておきたいですな。

今回紹介したメソッドのほかにはCountメソッド、OrderByメソッドあたりも頻出かな?

ちなみに本記事は筆者のQiita初投稿なので、見出しとか段落とかフォントとかでミスがあっても大目に見ていただきたい…!