C# ラムダ式と LINQ の組み合わせ

LINQ(Language Integrated Query)は、ラムダ式が最も活躍する場面の一つです。コレクションに対する問い合わせ処理を、簡潔かつ直感的に記述できます。

Where:条件でフィルタリング

Where メソッドは、条件に合致する要素だけを抽出します。

var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evens = numbers.Where(n => n % 2 == 0);

foreach (var n in evens)
{
    Console.WriteLine(n); // 2, 4, 6, 8, 10
}

ラムダ式 n => n % 2 == 0 が各要素に適用され、true を返す要素だけが残ります。

Select:要素を変換

Select メソッドは、各要素を別の形に変換します。

var names = new List<string> { "alice", "bob", "charlie" };

var upperNames = names.Select(name => name.ToUpper());

foreach (var name in upperNames)
{
    Console.WriteLine(name); // ALICE, BOB, CHARLIE
}

メソッドチェーン

LINQ メソッドは連続して呼び出せるため、複雑な処理も読みやすく記述できます。

var products = new List<(string Name, int Price)>
{
    ("Apple", 150),
    ("Banana", 100),
    ("Cherry", 300),
    ("Date", 200)
};

var result = products
    .Where(p => p.Price >= 150)           // 150円以上
    .OrderBy(p => p.Price)                 // 価格順
    .Select(p => $"{p.Name}: {p.Price}円"); // 文字列に変換

foreach (var item in result)
{
    Console.WriteLine(item);
}
// Apple: 150円
// Date: 200円
// Cherry: 300円

その他の LINQ メソッド

LINQ には様々なメソッドが用意されています。いずれもラムダ式と組み合わせて使います。

FirstOrDefault / SingleOrDefault

条件に合う最初の要素、または唯一の要素を取得します。

Any / All

条件を満たす要素が1つでもあるか、すべて満たすかを判定します。

OrderBy / OrderByDescending

指定したキーで並び替えます。

GroupBy

指定したキーでグループ化します。

var numbers = new List<int> { 1, 2, 3, 4, 5 };

// 条件を満たす最初の要素
var first = numbers.FirstOrDefault(n => n > 3); // 4

// すべての要素が条件を満たすか
var allPositive = numbers.All(n => n > 0); // true

// 条件を満たす要素があるか
var hasEven = numbers.Any(n => n % 2 == 0); // true

ラムダ式と LINQ を組み合わせることで、データ処理のコードが格段に書きやすくなります。