この章のテーマ §
クエリ式とクエリのメソッド形式について学びます。
前提知識 §
Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, string型, foreach文
解説 §
C#にはLINQ(統合言語クエリ)というものがあります。
これは、列挙可能なオブジェクト、SQLデータベース、XML文書などを検索する統一された書式を提供する機能です。
これには、クエリ式とメソッド形式という2つの書き方が存在します。
クエリ式は、SQLのクエリ構文っぽくソースを書けるようにしたもので、SQLに慣れている人は比較的書きやすい方法です。
メソッド形式は、クエリを実際に行うメソッドを直接呼び出してしまう方法で、効率が高く通好みです。
クエリ式は、通常from句で始まりselect句で終わります。
from句は、"from 一時変数 in ソース"と書きます。ソースは列挙可能なオブジェクトや、データベースのテーブルなどです。
select句は、引数として結果として返す値を記述します。
クエリ式で良く使われるものには、他にwhere句とorderby句があります。
where句は、条件を制限します。この条件式をパスしたものだけが選択されます。サンプルソースでは、StartsWithメソッドで"A"で始まる文字列だけを選んでいます。
orderby句は指定した値でソートを行います。
メソッド形式の場合は、名前のAPI名を書くので大文字小文字のコンビネーションが変化します。一部は名前そのものが変化します。また、引数に渡す式はラムダ式として書かねばなりません。
罠の数々 §
- クエリ式は列挙オブジェクトを返すのであって、列挙を行うわけではない。列挙するには別途foreach文などを必要とする。ただし、例外的に列挙を行う機能も存在する(合計値を計算するSumメソッドなど)
- クエリ式には他にもいろいろな機能が存在する。ここで紹介したのは基本的な一部だけだ
- orderby句はdescendingを追加すると逆順ソートも可能だ
- ベテランはメソッド形式を使うことが多い。理由は簡単でより短く書けて自由度も高いから
参考リンク §
クエリ式の基本
サンプルソース: queryExpression §
string[] array = { "Alice", "Betty", "Aiko", "Cindy", "Abbie" };
Console.WriteLine("クエリ式の例");
var q1 = from n in array where n.StartsWith("A") orderby n select n.ToUpper();
foreach (var item in q1) Console.WriteLine(item);
Console.WriteLine("メソッド形式の例");
var q2 = array.Where(c=>c.StartsWith("A")).OrderBy(c=>c).Select(c=>c.ToUpper());
foreach (var item in q2) Console.WriteLine(item);
実行結果 §
クエリ式の例
ABBIE
AIKO
ALICE
メソッド形式の例
ABBIE
AIKO
ALICE
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
クエリ式のfromに相当するメソッド形式でのメソッドはどれだろうか?
- fromメソッド
- Fromメソッド
- Whereメソッド
- Selectメソッド
- そんなものはない
[[解答]]