C#でのLINQについて

はじめに


こんにちは、東京アプリケーションシステム T.Kです。
今回は、LINQについてお話してみようと思います。
調べる途中で同じ名前のアイドルがでましたが、もちろん違うLINQに関してです。
私も別のことを調べる途中でLINQのことを知ることになりましたが、C#に置いてLINQは欠かせないと言ってもいいほど重要なことらしいです。

LINQとは何か


一言で言えば「統合言語クエリ」です。
コレクション(配列やList、Dictionaryなど)の要素を処理するメソッドを集めたライブラリです。
コレクションは、データベースやXMLを操作する際にもよく使うため、C#でプログラミングをする場合、LINQの利用は避けて通れないと思われます。

LINQの特徴


LINQにはいくつか特徴があります。

・処理をメソッドで指定できる
・IEnumerable型に実装されており、IEnumerable型を返す
・LINQの処理は遅延実行される

LINQは、以下のように処理をメソッドで指定でき、IEnumerable型を返します。

IEnumerable linqResult = source.Select(s => s.Length)
.Where(l => l >= 4);

LINQのメリット


・読みやすい
最大のメリットは何と言っても読みやすさです。
やりたいこと1つにつき1つのメソッドを呼び出すので、
ぱっと見で何をしているのかがわかりやすくなります。
下記は、foreach文で書いたパターンとLINQで書いたパターンです。
これを比較してみても、LINQの方が簡潔に書けて読みやすいことがわかりますね。

・バグが発生しにくい
並び替え、絞り込み、変換などなど主要な機能は一通り網羅されているので
自分でロジックを書く必要が少なくなり、バグが入り込む余地が少なくなります。

・データの集まりを表現する幅広い型に対応している
LINQのメソッドを持つIEnumerable型はDictionaryやSetなどList以外にも実装されているので、
汎用的に処理を書くことができます。
例えば、下記のようにDictionaryの特定のキーを持つものを取り出して加工するまでループ処理を書かずして実現できます。

LINQのデメリット


・パフォーマンスの低下を招きやすい

最近のCPUであれば気になることはあまりないかもしれませんが
これはメソッドで呼び出すたびに、全要素にアクセスしていることを考えれば
容易に想像できるかと思います。
対策としては絞り込み(Where)を早い段階で使うなど要素へのアクセス数を
減らすことである程度軽減ができます。

まとめ


今回は、LINQついて話してみました。
私もIEnumerable型を調べる途中でしって勉強している身で上手く話してないですが、
C#にとても重要だと言われる以上は身に着けたいと思ってます。
皆さんもご存じではなかったのならこの機会にもっと調べてみるのはどうでしょうか。
ご覧いただきありがとうございます。