0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

レベル別LINQまとめ

Last updated at Posted at 2025-09-21

基礎編

まずは使用頻度の高い基礎編から。
LINQはここから覚えよう!

メソッド名 主な用途 典型的な使い方
Select 変換や射影 コレクションの各要素を別の形に変換する
Where 抽出・絞り込み 条件を満たす要素のみを抽出する
ToList / ToArray コレクション化 クエリ結果をList型や配列型に変換する
OrderBy / OrderByDescending 並び替え 昇順や降順で要素を並べ替える
First / FirstOrDefault 最初の要素取得 先頭の要素/先頭がなければデフォルト値取得
Any / All 条件判定 いずれか/全ての要素が条件を満たすか判定
Count 要素数カウント コレクション内の要素数を取得する

実装例

Select

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

Console.WriteLine("Select(要素をすべて2倍)");
var doubledNums = nums.Select(n => n * 2);
foreach (var n in doubledNums)
{
    Console.WriteLine(n);
}
Select(要素をすべて2倍)
2
4
6
8
10

Where

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

Console.WriteLine("Where(偶数のみを抽出)");
var evenNums = nums.Where(n => n % 2 == 0);
foreach (var n in evenNums)s
{
    Console.WriteLine(n);
}
Where(偶数のみを抽出)
2
4

ToList, ToArray

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

Console.WriteLine("ToArray(配列化)");
var arrayNums = nums.ToArray(); // Listから配列への変換
Console.WriteLine(arrayNums.GetType());

Console.WriteLine("ToList(リスト化)");
var numList = arrayNums.ToList(); // 配列からListへの変換
Console.WriteLine(numList.GetType());
ToArray(配列化)
System.Int32[]
ToList(リスト化)
System.Collections.Generic.List`1[System.Int32]

OrderBy, OrderByDescending

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

Console.WriteLine("OrderByDescending(降順)");
var descNums = nums.OrderByDescending(n => n);
foreach (var n in descNums)
{
    Console.WriteLine(n);
}

Console.WriteLine("OrderBy(昇順)");
var ascNums = descNums.OrderBy(n => n);
foreach (var n in ascNums)
{
    Console.WriteLine(n);
}
OrderByDescending(降順)
5
4
3
2
1
OrderBy(昇順)
1
2
3
4
5

First, FirstOrDefault

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

Console.WriteLine("First(最初の要素を取得)");
// 条件なし
Console.WriteLine(nums.First());
// 条件あり(条件に合致する中で最初の要素を返す)
Console.WriteLine(nums.First(n => n % 2 == 0)); 
// 条件に一致する要素がない場合は例外が発生する
try
{
    Console.WriteLine(nums.First(n => n > 5));
}
catch (InvalidOperationException e)
{
    Console.WriteLine(e.Message);
}

Console.WriteLine("FirstOrDefault(最初の要素を取得)");
// 条件なし
Console.WriteLine(nums.FirstOrDefault());
// 条件あり(条件に合致する中で最初の要素を返す)
Console.WriteLine(nums.FirstOrDefault(n => n % 2 == 0));
// 条件に一致する要素がない場合は0 (objectの場合はnull) を返す
Console.WriteLine(nums.FirstOrDefault(n => n > 5));
First(最初の要素を取得)
1
2
Sequence contains no matching element
FirstOrDefault(最初の要素を取得)
1
2
0

Any, All

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

Console.WriteLine("Any(コレクション内に条件に一致する要素が一つでも存在するか)");
Console.WriteLine(nums.Any(n => n % 2 == 0));
Console.WriteLine(nums.Any(n => n > 5));

Console.WriteLine("All(コレクション内のすべての要素が条件に一致するか)");
Console.WriteLine(nums.All(n => n < 10));
Console.WriteLine(nums.All(n => n % 2 == 0));
// 空リストに対してAllを使うとtrueが返ってくる
var emptyList = new List<int>();
Console.WriteLine(emptyList.All(n => n % 2 == 0));
Any(コレクション内に条件に一致する要素が一つでも存在するか)
True
False
All(コレクション内のすべての要素が条件に一致するか)
True
False
True

Count

var nums = new List<int> { 1, 2, 3, 4, 5 };
var emptyList = new List<int>();

Console.WriteLine("Count(要素数のカウント)");
Console.WriteLine(nums.Count());
Console.WriteLine(emptyList.Count());

使う機会少ないけど使えたらカッコいい編

次は頻繁には使わないけど覚えておくといざというときに役立つ編。
これを習得すればスマートなコードを書けること間違いなし!

メソッド名 主な用途 典型的な使い方
Reverse コレクションを逆順に コレクションの要素順を反転させて新しいシーケンスを返す
var reversed = collection.Reverse();
ToLookup 高速な辞書的アクセスの変換 コレクションをキーでグループ化し、キーに紐づく複数要素をまとめる
var lookup = collection.ToLookup(x => x.Key);
OfType 型フィルタリング 指定した型にキャスト可能な要素のみ抽出する
var filtered = collection.OfType();

実装例

Reverse

var strArray = new[] { "A", "C", "Z", "B" };

Console.WriteLine("Reverse(逆順処理)");
foreach (var item in strArray.Reverse())
{
    // アルファベットの昇順・降順に関わらず単純に逆順で処理
    Console.WriteLine(item);
}
Reverse(逆順処理)
B
Z
C
A

ToLookup


// ジョジョキャラを例にやってみます
public class Character
{
    public string? Name { get; set; }
    public int Part { get; set; }
}

// 部ごとにオブジェクト化してリストへ格納
var characters = new List<Character>
{
    new Character { Name = "Jonathan", Part = 1 },
    new Character { Name = "Elenor", Part = 1 },
    new Character { Name = "Joseph", Part = 2 },
    new Character { Name = "SuziQ", Part = 2 },
    new Character { Name = "Jotaro", Part = 3 },
    new Character { Name = "Avdol", Part = 3 }
};

// Lookup化して部ごとに分類
ILookup<int, Character> lookup = characters.ToLookup(c => c.Part);

Console.WriteLine("ToLookUp(辞書的アクセス可能なオブジェクトへの変換)");

foreach (IGrouping<int, Character> group in lookup)
{
    // key = Character.Part
    Console.Write($"{group.Key}部:");
    foreach (var character in group)
    {
        Console.Write($" {character.Name}");
    }
    Console.WriteLine(); // 改行
}
ToLookUp(辞書的アクセス可能なオブジェクトへの変換)
1部: Jonathan Elenor
2部: Joseph SuziQ
3部: Jotaro Avdol

OfType

ArrayList arrayList = new ArrayList { "記事を", 2, 6, "読んでくれて", null, 8, "ありがとう", 10, "!" };

// stringだけを抽出
IEnumerable<string> strings = arrayList.OfType<string>();

Console.WriteLine("OfType(型フィルタリング)");
foreach (var str in strings)
{
    Console.Write(str);
}
OfType(型フィルタリング)
記事を読んでくれてありがとう!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?