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 を組み合わせることで、データ処理のコードが格段に書きやすくなります。