やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

C#の概念 LINQ

 C#といえばLINQSQLっぽい構文でデータを取得できる。

成果物

情報源

Linqについて

 Linqとは、クエリに基づいてデータソースから以下のいずれかを取得する構文。

  • イテレータ
    • サブセットを取得する
    • 新しい型に変換する
  • 単一値を取得する

コード

サブセットを取得する

using System;
using System.Linq;
using System.Collections.Generic;

class Main {
    public void Run() {
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        IEnumerable<int> b = from v in a
                             where 1 == (v % 2)
                             select v;
        foreach (int v in b) {
            Console.WriteLine($"v={v}");
        }
    }
}

新しい型に変換する

class Main {
    public void Run() {
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        IEnumerable<string> b = from v in a
                             where 1 == (v % 2)
                             select $"v={v}";
        foreach (string v in b) {
            Console.WriteLine(v);
        }
    }
}

単一値を取得する

class Main {
    public void Run() {
        int[] a = new int[] { 1, 2, 3, 4, 5 };
        int count = (from v in a
                     where 1 == (v % 2)
                     select $"v={v}").Count();
        Console.WriteLine($"odd={count}");
    }
}

名前 意味
クエリ 命令セット。データから取得条件や形式を指示する
クエリ式 クエリ構文で表されたクエリのこと
クエリ変数 結果でなくクエリを格納した変数のこと

クエリ構文

構文
開始 from
終了 select or group

 他にもinto, where, join, orderby, letなどがある。

 副問合せ(サブクエリ)もできる。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux