VisualStudio 技術解説 – LINQ

LINQとは、「Language INtegrated Query」の略で、C#やVB.netのソースコード中に、SQL「のような」クエリ構文を記述する事で、複雑なデータ操作を簡単に実現できる構文とライブラリのセットの事です。

実際にはクエリ構文で書く必要は無い(メソッド呼び出しの組み合わせでも実現可能)で、更にメモリ上のデータ操作だけではなく、SQL Serverなどのリモートデータシステムに対しても、同じ構文で直接操作が可能になります。プリプロセッサタイプの埋め込み技術(例:Pro*C)と異なり、コンパイラが構文を直接解釈する事による、様々なメリットを享受できます。

オンメモリで動作する、一番基礎となるLINQを特に「LINQ to Objects」と呼びます。

// 指定された個数の乱数を生成する
public IEnumerable<int> GenerateRandomNumbers(int count)
{
	var r = new Random();
	return
		from index in Enumerable.Range(0, count)
		select r.Next();
}

// 乱数のうち、2と3で割り切れないものを抽出し、降順で表示する
public void PrintRandoms()
{
	var q =
		from value in GenerateRandomNumbers(10000)
		where ((value % 2) != 0) && ((value % 3) != 0)
		orderby value descending
		select value;

	foreach (var value in q)
	{
		Console.WriteLine(value);
	}
}

LINQは本当に強力だ

最初に書き始めた、LINQの解説記事です。まだまだこなれていないので、読みにくいと思います (;´Д`) あと、連載としてはまだ継続させるつもりだったのですが、途中で中断してしまいました。

技術レベル:200~300

目次

LINQは本当に強力だ (1) データ加工の究極の道具
LINQは本当に強力だ (2) クエリの連結と拡張メソッド
LINQは本当に強力だ (3) 拡張メソッドによる拡張
LINQは本当に強力だ (4) アルゴリズムヘルパーメソッド
LINQは本当に強力だ (5) クエリ構文とメソッド構文
LINQは本当に強力だ (6) TextFieldContext
LINQは本当に強力だ (7) 範囲変数と構文の選択
LINQは本当に強力だ (8) 何が並列化されるのか


Advent LINQ 2013

「Advent LINQ 2013」は、2013年のAdvent Calendarの時期に書いた、LINQの基本的なネタからクエリの動的解析までを解説したシリーズです。また、「LINQは本当に強力だ」の焼き直し的な位置づけのつもりです。
後半はやや高度な内容で、IQueryableインターフェイスで実現されるLINQプロバイダーの実装に焦点を置いて解説しています。式木を使う動的生成技術としての参考になると思います。

技術レベル:200~500

目次

Advent LINQ (1): SplitAsEnumerable
Advent LINQ (2): TextReader.AsEnumerable
Advent LINQ (3): FilesAsEnumerable
Advent LINQ (4): Buffering
Advent LINQ (5): Flatten
Advent LINQ (6): Match
Advent LINQ (7): Count
Advent LINQ (8): ElementAt
Advent LINQ (9): ParallelQuery対応拡張メソッドの実装
Advent LINQ (10): .NET 2.0でLINQを使う
Advent LINQ (11): SQL文を取得する
Advent LINQ (12): リファクタリング可能なメンバ名
Advent LINQ (13): ExpressionとLINQ
Advent LINQ (14): 条件式が実行される場所
Advent LINQ (15): SQL表現可能な式
Advent LINQ (16): 表形式と構造化形式
Advent LINQ (17) : Expressionの評価
Advent LINQ (18) : Expressionの探索
Advent LINQ (19) : Expressionのコンパイルと独立性
Advent LINQ (20) : IEnumerableとIQueryableの相互変換
Advent LINQ (21) : LINQプロバイダー
Advent LINQ (22) : 解釈するクエリの範囲
Advent LINQ (23) : 事前評価可能な式
Advent LINQ (24) : The Provider Core
Advent LINQ (25) : LINQプロバイダーの仕上げ

Advent LINQ 2013 : あとがき

Advent LINQ 2013 : おまけ (Parallel.ForEach)


LINQ基本のキ

「LINQ基本のキ 」は、第8回まどべんよっかいちで登壇して、LINQの超初級な内容をプレゼンしたものです。ざっくりとした概要なので、より本格的に内容を把握したい場合は、下の「Final LINQ Extensions」シリーズを参照してください。

技術レベル:200

オリジナルスライド:LINQ基本のキ_2.pptx


Final LINQ Extensions

「Final LINQ Extensions」は、LINQ to Objectsの技術解説のプレゼンです。Center CLRで発表しました。LINQすら浸透していない、闇な開発現場はまだまだあると思います。そこで従事している方は、先端な技術を扱うチームとの技術レベルのギャップがどんどん開いているのでは、と思っています。そのような方に、今からでも何とか追いつくことが出来るようにと考えて書いたのが、この企画です。

なお、「Final」の冠のとおり、この解説でLINQ to Objectについての入門解説は完了させる、ぐらいのつもりで作ってます。
プレゼンなので、解説しながら進行しているため、スライドだけでは網羅していない内容もあります。できれば、勉強会に参加して聞いて下さい。

全三回で完結しました。

Final LINQ Extensions

技術レベル:200~300

オリジナルスライド: Final LINQ Extensions.pptx

Final LINQ Extensions Ⅱ

技術レベル:300

オリジナルスライド: Final LINQ Extensions II.pptx

Final LINQ Extensions Ⅲ

技術レベル:300~350

オリジナルスライド: Final LINQ Extensions III.pptx
GitHub: CenterCLR.CustomLINQProviderDemo


列挙可能から完全なるモノまで – IEnumerableの探索

「列挙可能から完全なるモノまで – IEnumerableの探索」は、C# Advent Calendar 2014に参加して書いた記事です。.NET 1.0から現在に至るまでの、「コレクション」の定義と再定義についての考察です。

技術レベル:200~300

列挙可能から完全なるモノまで – IEnumerableの探索 – C# Advent Calendar 2014


C#でわかる こわくないM

「C#でわかる こわくないM」は、F# 勉強会 岐阜で登壇して、「モナド」という構造がどのようなものであるのか、又.NETのLINQがモナドに似ていることなどを、C#での最小コードを元に解説しました。最終的にはF#のコンピュテーション式での応用方法を示して、モナドが基礎的な役割を担っていることを示します。

技術レベル:300

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください