LINQを利用したプログラミング - C#

LINQを利用したプログラムを紹介します。

概要

LINQは .NET Framework 環境で標準化された手法でデータの問い合わせをするための言語です。

書式

クエリ式の場合は以下が基本的な書式となります。
from (変数名) in (配列名)
where (条件式)
orderby (ソート条件式)
select (変数名)
where, orderby は省略可能なため、以下の書式も利用できます。
from (変数名) in (配列名)
select (変数名)

プログラム

UI

下図のUIを作成します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleLinq
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int[] data = new int[10] { 10, 2, 4, 1, 9, 3, 8, 12, 15, 5 };

      var query = from i in data where i > 5 select i;
      foreach (int n in query) {
        textBox1.Text += string.Format("{0:d}\r\n", n);
      }
    }
  }
}

解説

下記コードにて、int型の配列を作成します。初期値も設定します。
int[] data = new int[10] { 10, 2, 4, 1, 9, 3, 8, 12, 15, 5 };

LINQのクエリを用い、先に作成したdata配列から問い合わせ(検索)をします。
今回のコードは data 配列の要素をiとして、iの値が5以上の要素を取得するLINQになります。問い合わせの結果は query変数に代入されます。
  var query = from i in data where i > 5 select i;

foreachループを用いて、query変数の値をテキストボックスに表示します。
  foreach (int n in query) {
    textBox1.Text += string.Format("{0:d}\r\n", n);
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。テキストボックスに下図のテキストが表示されます。data配列の要素で、5以上の要素の値がテキストボックスに表示されていることが確認できます。

メソッド構文の例

先に紹介したSQLライクなLINQの式はクエリ構文と呼ばれる書式です。LINQではクエリ構文以外にメソッド構文と呼ばれる書式も利用できます。メソッド構文を利用したプログラムコードを紹介します。

UI

下図のUIを作成します。Windowsフォームに複数行のTextBoxとButtonを配置します。

コード

下記のコードを記述します。[button1]のクリックイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SimpleLinq
{
  public partial class FormSimpleMethodBasedSyntax : Form
  {
    public FormSimpleMethodBasedSyntax()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int[] data = new int[10] { 10, 2, 4, 1, 9, 3, 8, 12, 15, 5 };

      var query = data.Where(i => i>5);

      foreach (int n in query) {
        textBox1.Text += string.Format("{0:d}\r\n", n);
      }
    }
  }
}

解説

下記のLINQの式
  var query = data.Where(i => i>5);
は下記のクエリ構文のLINQと同等となります。
メソッド構文では、IEnumerableを継承しているEnumerableオブジェクトのメソッドを呼び出して処理を実行します。EnumerableオブジェクトにはLINQで用いられるWhereメソッド、Joinメソッド、OrderByメソッドなどが用意されています。
  var query = from i in data where i > 5 select i;

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。data 配列の値で5より大きい値がテキストボックスに表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-01-05
iPentec all rights reserverd.