情報応用演習Ⅰ(2024)

【T2c】LINQ(4/4)

プロジェクトタイプC#コンソールアプリ※
プロジェクト名T2c
ソリューション名PIT2
ターゲットフレームワーク.NET 8.0(長期的なサポート)
最上位レベルのステートメントを使用しない使用する(チェックオフ)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については従来の絞り込み処理を参照せよ.

2c-4. LINQとデータ抽出

LINQを用いると,絞り込みだけでなく単一のデータの抽出も行うことができる. つまり絞り込みによって多数のデータから条件に合う複数のデータを抽出するのではなく, RDBにおける主キーのような一意性を問う条件を用いて単一のデータを取り出す,ということである.

たとえば学生のリストの中からIDが8である学生を抽出してみよう. Program.csを_のように書き換えてみよう.

Program.csの内容 - LINQを用いた抽出
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
using T2c;

var students = new[]
{
    // ... (長いので省略) ...
};// end of array

// 抽出処理
var result = (from s in students
              where s.ID == 8
              select s).FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"{result.ID,2}: {result.Name} ({result.Birthday:yyyy-MM-dd})");
}

実行結果は_のようになる.

 8: 葵井 巫女子 (2002-06-01)
実行結果

.FirstOrDefault()メソッドは, LINQの式に対して使用できるメソッドの一つで,絞り込み結果の最初の要素を返すメソッド(拡張メソッド)である. 絞り込み結果が空である場合には,この場合は null が返される.

.FirstOrDefault()メソッドのほかにも,このような補助用のメソッドがいくつか用意されている. よく使用するものを_にその一例を示す.

LINQで使用できる補助用のメソッド(一部)
メソッド作用
.Min()結果のうち最小のものを返す.
.Max()結果のうち最大のものを返す.
.First()結果のうち最初の要素を返す.
.FirstOrDefault()結果のうち最初の要素を返す.結果が空ならばその型のデフォルト値を返す.
.Last()結果のうち最後の要素を返す.
.LastOrDefault()結果のうち最後の要素を返す.結果が空ならばその型のデフォルト値を返す.
.Skip()結果のうち最初のn個を飛ばす.
.Take()結果のうち最初のn個のみを受け取る.

さらに, select の部分を指定することによってコレクションを別の型のコレクションに変換することができる. これは関係代数でいえば射影に相当する操作である. たとえば学生のリストを,各々の学生の誕生日からなる DateTime 型のコレクションに変換してみよう. Program.csを_のように書き換えてみよう.

Program.csの内容 - LINQを用いた射影
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
using T2c;

var students = new[]
{
    // ... (長いので省略) ...
};// end of array

// 射影
var birthdays = from s in students
                select s.Birthday;

foreach (var date in birthdays)
{
    Console.WriteLine($"{date:yyyy-MM-dd}");
}//foreach

実行結果は_のようになる.

1998-09-30
2003-01-10
2000-03-08
2001-11-21
2000-03-08
2000-04-10
2002-06-01
2000-03-25
2000-03-22
2003-06-12
2001-10-03
2000-03-28
1999-07-13
2002-05-15
1980-03-11
2003-02-11
実行結果

LINQの式の中で select s.Birthdayと指定したことで,Studentのコレクションが DateTime 型の コレクションに読み替えられた.

このほかにもLINQには様々な応用方法があるが,ほかは必要となったときに紹介することにしよう.

ここまでの動作を確認したら三つ目のチュートリアルは完了である. 以降の作業における混乱を防ぐため,次に進む前に Visual Studio のエディタをすべて閉じておこう.Visual Studio のいずれかのエディタのタブを右クリックして 「すべてのドキュメントを閉じる」をクリックすれば,エディタをすべて閉じることができる

Last updated on 2024-04-26
Published on 2024-04-26

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.