LINQを使ってデータを取得する
今回は、C# でのクエリ操作を行う上で必須となる LINQ の解説を行います。
LINQ(Language Integrated Query)とは、マイクロソフトの公式によると以下のような内容です。
統合言語クエリ (LINQ) では、言語レベルのクエリ機能と、表現力豊かな宣言コードの記述を可能にする高階関数 API が C# および Visual Basic に提供されます。
要するに、プログラム言語で標準に搭載されているクエリ(問い合わせ)機能ということになります。
なお、LINQ は、データベースだけではなく、ソースコード内の配列やリストなどにも利用できます。
LINQの使い方
LINQ の使い方ですが、2通りの記述方法があります。
- クエリ構文
- SQL文のように from、where、select などのキーワードを使う方法
- メソッド構文
- Where()、Select()などのメソッドをつなげて記述する方法
具体的な例を見ていきましょう。
以下のサンプルは、前回の記事で作成したプログラムを LINQ を使って、ID が 1 のデータを表示します。
まずは、クエリ構文の例です。
1 2 3 4 |
public async Task<List<Emp>> Index() { return await (from x in _context.Emps where x.Id == 1 select x).ToListAsync(); } |
次に、メソッド構文の例です。
1 2 3 4 |
public async Task<List<Emp>> Index() { return await _context.Emps.Where(x => x.Id == 1).ToListAsync(); } |
どちらを使うべきかは一概には言えませんが、マイクロソフトによればクエリ構文の方がより柔軟性があるため、クエリ構文を推奨しているようです。
メソッド構文で使用するメソッドの種類
メソッド構文で使用するメソッドには、多くの種類があります。
ここでは、良く使用するメソッドを一部抜粋します。
メソッド名 | 内容 |
---|---|
Average | 数値のシーケンスの平均を計算する |
Contains | 指定した要素がシーケンスに格納されているかどうかを調べる |
Count | シーケンス内の要素数を返す |
First | シーケンスの最初の要素を返す |
GroupBy | シーケンスの要素をグループ化する |
Join | 一致するキーに基づいて 2 つのシーケンスの要素を相互に関連付ける |
Last | シーケンスの最後の要素を返す |
Max | 値のシーケンスの最大値を返す |
Min | 値のシーケンスの最小値を返す |
OrderBy | シーケンスの要素を昇順に並べ替える |
OrderByDescending | シーケンスの要素を降順に並べ替える |
Range | 指定した範囲内の整数のシーケンスを生成する |
Select | シーケンスの各要素を新しいフォームに射影する |
Skip | シーケンス内の指定された数の要素をバイパスし、残りの要素を返す |
Sum | 数値のシーケンスの合計を計算する |
Take | シーケンスの先頭から、指定された数の連続する要素を返す |
Where | 述語に基づいて値のシーケンスをフィルター処理する |
詳しい内容は、以下のマイクロソフト公式サイトを参照してください。