![C#のアイコン](https://www.w2solution.co.jp/tech/wp-content/uploads/2021/08/csharp.png)
こんにちは。新卒エンジニアの古田です。
LINQには使える拡張メソッドが多く、複数の拡張メソッドが組み合わさると何がなんだかわからなくなりますよね。
自分は全く読めなくてとても大変な思いをしたので、これからLINQに挑戦するけど何が何だかわからない人がつまづかないようにLINQの書き方についてご紹介していきます。
LINQとは
Langage INtegrated Queryの略で、統合言語クエリというらしいです。
(記事を作成するときに調べて初めて知りました。)
foreach内でif分をたくさん書く場合などはLINQで書く方が処理も短くなって可読性が良くなります。
LINQで使えるメソッドの使い方
今回は以下の表に記載されている簡単な拡張メソッドを使ってLINQの書き方をご紹介します。
名称 | 機能 |
Select | 各要素から必要な要素だけを取り出す(射影) |
Where | 指定した条件でフィルタ |
FirstOrDefault | 最初の要素を取得 |
ToList | リスト型に変換 |
・Select
SelectはSQLで使われるSELECTと同じような使い方ができるのでとても使いやすいです。
例えば下記のようにLINQを書いたとしましょう。
var fruitsList = new List<string>
{
"りんご",
"ばなな",
"ぶどう",
"みかん"
};
var result = fruitsList.Select(item => item);
resultにはfruitsListの中身が配列で格納されそうですが、格納されるのはIEnumerable型(追加や削除ができないListのようなもの)なのでそのまま使用できません。
foreachで使えたりしますが、せっかくLINQを使っているのでLINQだけで完結したいですよね。
そこで使えるのが「ToList」です。
Selectの実行結果でIEnumerable型が返ってきたものをList型に変換してくれます。
※LINQの実行結果は基本的にIEnumerable型で返ってくるので実行結果が複数ある場合は、ToListかToArrayを使用してあげましょう。
var result = fruitsList
.Select(item => item)
.ToList();
// 結果
result[0] = "りんご"
result[1] = "ばなな"
result[2] = "ぶどう"
result[3] = "みかん"
・Where
次にWhereを使って絞り込みをかけます。
今回は「fruitsList」から「”ぶどう”」だけを取得します。
Whereの実行結果もSelect同様にIEnumerable型が返ってくるので、加工する場合はToListかToArrayする必要があります。
var result = fruitsList
.Where(item => (item.ToString() == "ぶどう"))
.ToList();
// 結果
result[0] = "ぶどう"
・FirstOrDefault
最後は複数取得してきた中から一番初めの要素だけを取得したい場合に便利なFirstOrDefaultです。
FirstOrDefaultのカッコ内に条件式を書くことで条件に一致するListの中の初めの要素だけを取得したり、条件に一致しない場合は規定値を返すようにしたりできます。
Listの中の初めの要素を取得する拡張メソッドで「First」があります。
こちらは要素が何もない場合は例外が発生してしまうので規定値を返せる「FirstOrDefault」が便利です。
var result = fruitsList
.Select(item => item)
.FirstOrDefault();
// 結果
result = "りんご"
いかがでしたでしょうか。
簡単なLINQが分かればある程度連結されたLINQでも読み解けるようになるので条件式もできるだけ使わないように紹介しました。
自分と同じようにLINQがわからなくて困っている方の助けになっていれば幸いです。
コメント