LINQ 拡張メソッド一覧

LINQが登場して10年以上が経過しましたが、私の周りには未だに使えない開発者の方が大勢いらっしゃいます。
「ラムダ式がよくわからないので、LINQやラムダ式は使わないでください。」という客先の開発者の方もいます。(年配の方が多いです。)
自分も数年前までは仕事でLINQを使う機会があまりなかったので「必要になったらその都度覚えればいいかな~」ぐらいに思っていましたが、ある日突然覚えようと思ってもなかなか覚えられません。よく使うWhereメソッドやSelectメソッドはそれなりに使えますが、LINQで何ができるのかがわかっていないと、LINQでできるのに別の方法で無駄なコードを書くことになってしまうこともあります。
そこで、LINQの拡張メソッドを少しずつまとめていくことにしました。

目次

はじめに

シーケンスについて

本記事に記載の「シーケンス」とは、配列やリストなどの「順序が定まっており、順番に列挙することが可能なコレクション」のことを指します。

実行方法について

遅延実行」と記載のあるメソッドは戻り値としてIEnumerable<T>型のオブジェクトを返しますが、メソッドを呼び出した時点では実行(実体化)されません。戻り値のIEnumerable<T>型のオブジェクトに対してforeachで要素を読み出した時点や「即時実行」と記載のあるメソッドを呼び出した時点で実行(実体化)されます。「即時実行」と記載のあるメソッドはIEnumerable<T>型などのシーケンスから、別の型のオブジェクトを実体化して返します。

拡張メソッド一覧

本記事で扱う拡張メソッドは次の通りです。

メソッド名 説明
Aggregate 要素を集計します。
All 指定した条件をすべての要素が満たしているかどうかを返します。
Any 指定した条件を満たしている要素があるかどうかを返します。
AsEnumerable シーケンスをIEnumerableに変換します。
Average 要素内(リストや配列などのシーケンス)の平均値を返します。
Cast シーケンスを指定した型に変換します。
Concat 2つのシーケンスを連結します。
Contains 指定した値が要素内(リストや配列などのシーケンス)にあるかどうかを返します。
Count 要素数を返します。
DefaultIfEmpty 指定したシーケンス(コレクション)を返します。要素がない場合は既定値を返します。
Distinct リストや配列などのシーケンスから重複を除去した結果を返します。
ElementAt 指定したインデックス位置にある要素を返します。
ElementAtOrDefault 指定したインデックス位置にある要素を返します。要素がない場合は既定値を返します。
Empty 指定した型引数を持つ空のIEnumerableを返します。
Except 2つのシーケンスの差集合を取得します。
First 最初の要素を返します。
FirstOrDefault 最初の要素を返します。要素がない場合は既定値(default)を返します。
GroupBy 指定したキーで要素をグループ化します。
GroupJoin 一致するキーに基づいて2つのシーケンスを関連付け、指定したキーで要素をグループ化します。
Intersect 2つのシーケンスの積集合を取得します。
Join 一致するキーに基づいて2つのシーケンスを関連付けます。
Last 最後の要素を返します。
LastOrDefault 最後の要素を返します。要素がない場合は既定値を返します。
LongCount 要素数をlong(64ビット符号付き整数)で返します。
Max 要素内(リストや配列などのシーケンス)の最大値を返します。
Min 要素内(リストや配列などのシーケンス)の最小値を返します。
OfType 指定した型に変換できる要素を返します。
OrderBy 要素を昇順に並べ替えます。
OrderByDescending 要素を降順に並べ替えます。
Range 指定した値から1ずつインクリメント(増量)しながら、指定した回数分繰り返した整数のシーケンスを作成します。
Repeat 指定した値を、指定した回数分繰り返したシーケンスを作成します。
Reverse 要素の順番を逆転させます。
Select 新しいシーケンス(コレクション)を作成します。
SelectMany Selectメソッドで2次元で返されるコレクションを1次元のコレクションで返します。(平坦化して返します。)
SequenceEqual 要素が同じかどうかを返します。
Single 唯一の要素を返します。要素が複数になる場合は例外をスローします。
SingleOrDefault 唯一の要素を返します。要素がない場合は既定値を返します。
Skip 指定した個数の要素を飛ばした残りの要素を返します。
SkipWhile 指定した条件を満たす間は要素を飛ばした残りの要素を返します。
Sum 要素の合計値を返します。
Take 先頭から指定した個数の要素を返します。
TakeWhile 先頭から指定した条件を満たす間の要素を返します。
ThenBy OrderByの結果を維持したままシーケンスの要素を昇順に並び替えます。
ThenByDescending OrderByの結果を維持したままシーケンスの要素を降順に並び替えます。
ToArray シーケンスを配列に変換します。
ToDictionary シーケンスをDictionaryに変換します。
ToList シーケンスをListに変換します。
ToLookup 指定したキーごとに要素をまとめます。
Union 2つのシーケンスの和集合を取得します。
Where 指定した条件に一致する要素を返します。
Zip 2つのシーケンスをマージします。

要素を取得する

要素を取得するメソッドは次の14メソッドになります。

メソッド名 実行方法
Where 遅延実行
Take 遅延実行
TakeWhile 遅延実行
Skip 遅延実行
SkipWhile 遅延実行
First 即時実行
FirstOrDefault 即時実行
Last 即時実行
LastOrDefault 即時実行
ElementAt 即時実行
ElementAtOrDefault 即時実行
Single 即時実行
SingleOrDefault 即時実行
DefaultIfEmpty 即時実行

Where

遅延実行

Whereメソッドは指定した条件に一致する要素を返します。

実行結果として15, 20, 25, 30を返します。

Take

遅延実行

Takeメソッドは先頭から指定した個数の要素を返します。

実行結果として1, 2, 3を返します。

TakeWhile

遅延実行

TakeWhileメソッドは先頭から指定した条件を満たす間の要素を返します。

実行結果として3, 2を返します。

Skip

遅延実行

Skipメソッドは指定した個数の要素を飛ばした残りの要素を返します。

実行結果として32, 5, 22, 7を返します。

SkipWhile

遅延実行

SkipWhileメソッドは指定した条件を満たす間は要素を飛ばした残りの要素を返します。

実行結果として20, 3, 12を返します。

First

即時実行

Fiestメソッドは最初の要素を返します。

実行結果としてquery1には6を返します。query2には3を返します。

FirstOrDefault

即時実行

FirstOrDefaultメソッドは最初の要素を返します。要素がない場合は既定値(default<T>)を返します。

実行結果としてquery1には0を返します。query2には7を返します。

Last

即時実行

Lastメソッドは最後の要素を返します。

実行結果としてquery1には25を返します。query2には4を返します。

LastOrDefault

即時実行

LastOrDefaultメソッドは最後の要素を返します。要素がない場合は既定値を返します。

実行結果としてquery1には2を返します。query2には0を返します。

ElementAt

即時実行

ElementAtメソッドは指定したインデックス位置にある要素を返します。

実行結果としてeを返します。

ElementAtOrDefault

即時実行

ElementAtOrDefaultメソッドは指定したインデックス位置にある要素を返します。要素がない場合は既定値を返します。

実行結果として0を返します。

Single

即時実行

Singleメソッドは唯一の要素を返します。要素が複数になる場合は例外をスローします。

実行結果としてquery1は例外が発生します。query2は2を返します。

SingleOrDefault

即時実行

SingleOrDefaultメソッドは唯一の要素を返します。要素がない場合は既定値を返します。

実行結果として10を返します。

DefaultIfEmpty

即時実行

DefaultIfEmptyメソッドは指定したシーケンス(コレクション)を返します。要素がない場合は既定値を返します。

実行結果としてquery1には「1, 3, 5」を返します。query2には「0」を返します。query3には「1, 3, 5」を返します。query4には「-1」を返します。

新しい要素のシーケンス(コレクション)を作成する(射影)

新しい要素のシーケンス作成する(要素を射影する)メソッドは次の2メソッドになります。

メソッド名 実行方法
Select 遅延実行
SelectMany 遅延実行

使用するクラスとオブジェクト

Select

遅延実行

Selectメソッドは新しいシーケンス(コレクション)を作成します。

実行結果としてquery1には15, 17を返します。query2には30, 34を返します。
query3には匿名オブジェクトとして
{
Namae = “John”, Nenrei = 15
Namae = “Bob”, Nenrei = 17
}
を返します。
query4にはToolsを返しますがIEnumerable<Tool>型が返るので、Toolを取り出すのに2つのループが必要です。(JohnとBobのそれぞれのToolsが返ります。)

SelectMany

遅延実行

SelectManyメソッドはSelectメソッドで2次元で返されるコレクションを1次元のコレクションで返します。(平坦化して返します。)

実行結果として”John’s Tool1″, “John’s Tool2”, “Bob’s Tool1”, “Bob’s Tool2″の4要素を返します。(queryに4要素が返ります。)

重複する要素を除去する

重複する要素を除去するメソッドはDistinctになります。

メソッド名 実行方法
Distinct 遅延実行

Distinct

遅延実行

Distinctメソッドはリストや配列などのシーケンスから重複を除去した結果を返します。

実行結果として「1, 4, 5, 3, 2」を返します。

要素内(リストや配列などのシーケンス)で計算する

要素内(リストや配列などのシーケンス)で計算するメソッドは次の7メソッドになります。

メソッド名 実行方法
Average 即時実行
Sum 即時実行
Aggregate 即時実行
Count 即時実行
LongCount 即時実行
Max 即時実行
Min 即時実行

Average

即時実行

Averageメソッドは要素内(リストや配列などのシーケンス)の平均値を返します。

実行結果として76を返します。

Sum

即時実行

Sumメソッドは要素の合計値を返します。

実行結果として304を返します。

Aggregate

即時実行

Aggregateメソッドは要素を集計します。

// 全要素を集計して最大値を取得
var query2 = numbers.Aggregate((greaterthan, next) => greaterthan < next ? next : greaterthan);

実行結果としてquery1には16を返します。query2には7を返します。

Count

即時実行

Countメソッドは要素数を返します。

実行結果として3を返します。

LongCount

即時実行

LongCountメソッドは要素数をlong(64ビット符号付き整数)で返します。

実行結果として5を返します。

Max

即時実行

Maxメソッドは要素内(リストや配列などのシーケンス)の最大値を返します。

実行結果として9を返します。

Min

即時実行

Minメソッドは要素内(リストや配列などのシーケンス)の最小値を返します。

実行結果として2を返します。

要素を判定・検証する

要素を判定・検証するメソッドは次の4メソッドになります。

メソッド名 実行方法
All 即時実行
Any 即時実行
Contains 即時実行
SequenceEqual 即時実行

All

即時実行

Allメソッドは指定した条件をすべての要素が満たしているかどうかを返します。

実行結果としてquery1にはtrueを返します。query2にはfalseを返します。

Any

即時実行

Anyメソッドは指定した条件を満たしている要素があるかどうかを返します。

実行結果としてtrueを返します。

Contains

即時実行

Containsメソッドは指定した値が要素内(リストや配列などのシーケンス)にあるかどうかを返します。

実行結果としてtrueを返します。

SequenceEqual

即時実行

SequenceEqualメソッドは要素が同じかどうかを返します。

実行結果としてquery1にはtrueを返します。query2にはfalseを返します。

シーケンス(リストや配列などの要素の集まり)を変換する

シーケンス(リストや配列などの要素の集まり)を変換するメソッドは次の6メソッドになります。

メソッド名 実行方法
ToArray 即時実行
ToList 即時実行
ToDictionary 即時実行
AsEnumerable 遅延実行
Cast 遅延実行
OfType 遅延実行

ToArray

即時実行

ToArrayメソッドはシーケンスを配列に変換します。

実行結果としてint[]を返します。

ToList

即時実行

ToListメソッドはシーケンスをList<T>に変換します。

実行結果としてList<int>を返します。

ToDictionary

即時実行

ToDictionaryメソッドはシーケンスをDictionary<TKey,TValue>に変換します。

実行結果としてDictionary<string, Person>を返します。

AsEnumerable

遅延実行

AsEnumerableメソッドはシーケンスをIEnumerable<T>に変換します。

実行結果としてIEnumerable<int>を返します。

Cast

遅延実行

Castメソッドはシーケンスを指定した型に変換します。

実行結果としてIEnumerable<decimal>を返します。

OfType

遅延実行

OfTypeメソッドは指定した型に変換できる要素を返します。

実行結果として「”cat”, “dog”, “rabbit”」を返します。

シーケンス(リストや配列などの要素の集まり)を結合する

シーケンス(リストや配列などの要素の集まり)を結合するメソッドは次の3メソッドになります。

メソッド名 実行方法
Concat 遅延実行
Join 遅延実行
Zip 遅延実行

Concat

遅延実行

Concatメソッドは2つのシーケンスを連結します。(縦結合)

実行結果として「0, 2, 4, 6, 8, 1, 3, 5, 7, 9」を返します。

Join

遅延実行

Joinメソッドは一致するキーに基づいて2つのシーケンスを関連付けます。(横結合)

実行結果としてName (Person.Name)とGender (Gender.Name)を持つオブジェクトを返します。

Zip

遅延実行

Zipメソッドは2つのシーケンスをマージします。

実行結果としてマージできた要素を返します。

要素をグループ化する(グルーピング)

要素をグループ化するメソッドは次の2メソッドになります。

メソッド名 実行方法
GroupBy 遅延実行
ToLookup 即時実行

GroupBy

遅延実行

GroupByメソッドは指定したキーで要素をグループ化します。

実行結果としてIEnumerable<IGrouping<string, Student>>を返します。

ToLookup

即時実行

ToLookupメソッドは指定したキーごとに要素をまとめます。

実行結果としてILookup<string, Member>を返します。

シーケンス(リストや配列などの要素の集まり)を結合して要素をグループ化する

シーケンス(リストや配列などの要素の集まり)を結合して要素をグループ化するメソッドはGroupJoinになります。

メソッド名 実行方法
GroupJoin 遅延実行

GroupJoin

遅延実行

GroupJoinメソッドは一致するキーに基づいて2つのシーケンスを関連付け、指定したキーで要素をグループ化します。

実行結果としてGroupElementのコレクションを返します。

要素を並べ替える

要素を検証・判定するメソッドは次の5メソッドになります。

メソッド名 実行方法
Reverse 遅延実行
OrderBy 遅延実行
OrderByDescending 遅延実行
ThenBy 遅延実行
ThenByDescending 遅延実行

Reverse

遅延実行

Reverseメソッドは要素の順番を逆転させます。

実行結果として「e, d, c, b, a」を返します。

OrderBy

遅延実行

OrderByメソッドは要素を昇順に並べ替えます。

実行結果として「0, 1, 2, 3, 4, 5」を返します。

OrderByDescending

遅延実行

OrderByDescendingメソッドは要素を降順に並べ替えます。

実行結果として「5, 4, 3, 2, 1, 0」を返します。

ThenBy

遅延実行

ThenByメソッドはOrderByの結果を維持したままシーケンスの要素を昇順に並び替えます。

実行結果として「cow, bear, lion, wolf, horse, tiger, zebra」を返します。

ThenByDescending

遅延実行

ThenByDescendingメソッドはOrderByの結果を維持したままシーケンスの要素を降順に並び替えます。

実行結果として「cow, wolf, lion, bear, zebra, tiger, horse」を返します。

シーケンス(リストや配列などの要素の集まり)の集合を演算する

シーケンス(リストや配列などの要素の集まり)の集合を演算するメソッドは次の3メソッドになります。

メソッド名 実行方法
Union 遅延実行
Except 遅延実行
Intersect 遅延実行

Union

遅延実行

Unionメソッドは2つのシーケンスの和集合を取得します。

実行結果として「2, 4, 5, 6, 8, 1, 3, 7, 9」(重複を除いてnumbers1とnumbers2を連結した結果)を返します。

Except

遅延実行

Exceptメソッドは2つのシーケンスの差集合を取得します。

実行結果として「2, 4, 6」(numbers1のうちnumbers2に存在しない要素)を返します。

Intersect

遅延実行

Intersectメソッドは2つのシーケンスの積集合を取得します。

実行結果としてを返します。
実行結果として「5, 8」(numbers1とnumbers2の両方に存在する要素)を返します。

シーケンスを作成する

シーケンスを作成するメソッドは次の3メソッドになります。

メソッド名 実行方法
Range 遅延実行
Repeat 遅延実行
Empty 遅延実行

Range

遅延実行

Rangeメソッドは指定した値から1ずつインクリメント(増量)しながら、指定した回数分繰り返した整数のシーケンスを作成します。

実行結果として「1, 2, 3, 4, 5, 6, 7, 8, 9」を返します。

Repeat

遅延実行

Repeatメソッドは指定した値を、指定した回数分繰り返したシーケンスを作成します。

実行結果として「55, 55, 55, 55, 55」を返します。

Empty

遅延実行

Emptyメソッドは指定した型引数を持つ空のIEnumerableを返します。

実行結果としてstringsには空のstringのコレクションを返します。peopleには空のPersonのコレクションを返します。


参考: Enumerable クラス