概要:
大学時代にC#やSQLなど触っていなかったため、もちろんLINQについても分からないことが多くあったのでまとめてみる。
LINQとは?
統合言語クエリ (LINQ: Language-Integrated Query) とは、様々な種類のデータ構造に対して、統一したクエリを行うことができる、言語に統合された機能である。(データに対して、検索や整列などの処理が可能)ちなみに、統合言語クエリの「統合」とは、“データの種類に合わせて異なる言語を使用し操作していたもの”を統一した言語で操作可能にするという意味合いを持っている。
LINQの種類
LINQプロバイダーにより、各種オブジェクトに対するクエリが実行可能である。また、プロバイダーはアクセスするデータソースに応じて切り替わるため、開発者がプロバイダーの違いを意識しコーディングする必要はほとんどない。
LINQの記述方法(例)
実際にC#を用いてLINQクエリを作成する二つの方法(クエリ構文、メソッド構文)を紹介する。以下に示す例は、placesに格納されている単語からLINQを用いて文字数が5の単語を取り出し、先頭から三文字をコンソールに出力するプログラムである。クエリ構文とメソッド構文それぞれの例を示す
string[] places = {
"東京大学","大阪大学","名古屋大学",
"北海道大学","東北大学","京都大学","九州大学"
};
IEnumerable<string> result = from p in places
where p.Length == 5
orderby p
select p.Substring(0, 3);
foreach (var place in result)
{
Console.WriteLine(place);
}
実際の動き(上記の赤色)としては、fromでplacesに格納されている要素を変数pに一時的に格納し、whereを用いて要素の長さが5のデータを抽出する。そして、orderbyで抽出したデータに対してソートを行い、selectで出力形式(先頭から3文字)を指定し、resultに代入している。予備知識としては、Where、Selectなどに複雑な処理(デリケート、匿名メソッド)を埋め込むことも可能である。また、このクエリ動作が行われるのはforeachでアクセスされるタイミング(結果を取得するタイミング)である。以下に構文の詳細を示す。
from
対象となるデータの集合(データソース)を表すための句であり、次のような構文で表記する。
from データ変数 in データの集合
データ変数とは、データの集合から個々の要素を一時的に格納するための変数である。
where
データソースから抽出する要素の条件を指定する。(使用する言語の比較演算子を使用する)
where 抽出条件
orderby
指定した変数を昇順に並べ替える。(降順の場合:OrderByDescendingメソッドを使用する)
select
出力形式を指定する
select 抽出するメンバで構成される新しいクラス;
string[] places = {
"東京大学","大阪大学","名古屋大学",
"北海道大学","東北大学","京都大学","九州大学"
};
IEnumerable<string> result = places
.Where(p => p.Length == 5)
.OrderBy(p => p)
.Select(p => p.Substring(0, 3));
foreach (var place in result)
{
Console.WriteLine(place);
}
上記二つのプログラムを実行すると“北海道”“名古屋”が出力される。
まとめ
LINQ: Language-Integrated Queryとは、データに対して、検索や整列などの処理を行うことができる機能であり、様々な言語で統一した書式で記述可能である。本記事ではLINQについて調査した内容について紹介した。LINQの対象はDatabaseだけでなく、配列、XMLなど様々な場面で使用できるため、積極的に使用していくことが必要であろう。
参考文献:
https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/write-linq-queries