どうもこんにちは。
最近、C#を少々かじりまして。
その時に出てきたLINQについてのお話です。
目次
LINQとは?
統合言語クエリ(Language INtegrated Query)というものだそうです。
読み方は「リンク」とのこと。
詳しくは、こちらからどうぞ。⇒ 統合言語クエリ
または、こちら ⇒ C# の統合言語クエリ (LINQ)
どんなもの?
データベースとか、配列とかのデータソースを操作するために規格化されたもの、
という認識です。
※間違いがあればご指摘を。
例えば、こんな配列があったとしましょう。
あ、今回はあくまでC#で行きます。
1 2 3 4 5 6 7 |
var children = new [] { new {name="鈴木 たろう", age=10, blood="A"}, new {name="佐藤 ひろし", age=9, blood="B"}, new {name="高橋 はなこ", age=11, blood="O"}, new {name="田中 よしこ", age=8, blood="AB"}, }; |
ここから、ageが10以上の子供の名前を抽出して出力、
というのをLINQで記述すると、こうなります。
1 2 3 4 5 6 7 8 |
var list = from c in children where age >= 10 select c.name; foreach (var child in list) { Console.WriteLine(child); } |
こんな感じです。
なんか、SQLに似てますが、これはLINQのクエリ構文と呼ばれるもので、
他にメソッド構文もあり、同じことをメソッド構文で記述すると
1 2 3 4 5 6 7 |
var list = children.Where(c => c.age >= 10) .Select(c => c.name); foreach (var child in list) { Console.WriteLine(child); } |
こうなります。
今回の例では、とてもシンプルなものにしましたが、そのほか
OrderByや集計、別のデータソースと結合したりできます。
使ってみて?
クエリ構文は、SQLに似てしまってるがゆえにちょっととっつきにくかったです。
メソッド構文は、いわゆるORマッパーのメソッドチェーンっぽいかなー?
と思っていたのですが、
慣れてくるとクエリ構文の方が可読性が上がるな、という感じです。
最後に
今回はほんのさわりだけでした。
もっと詳しいことは当然のように先人たちが行き着いているので、
まずはいろんな方のとっかかりになればよいな、と思います。
現在、さまざまな言語でLINQの実装がされているようなので
そちらもあわせてどうぞ。
r.tanakaがお届けしました。