Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【C#入門】LINQとは?クエリ構文とメソッド構文をご紹介

f:id:WillSpecter:20200811195608j:plain

 

これまで、メソッド、クラス、インスタンスカプセル化、プロパティ、継承、オーバーライド、コレクション、ラムダ式などを順に紹介してきました。今回は、「LINQ」を紹介させていただきます。

 

◆これまでの記事◆
 

LINQとは

LINQ(リンク)はC#3.0のバージョンから導入された仕組みで、配列やコレクション、データベースに格納されているデータをとても簡単に整理できる仕組みです。条件に当てはまるデータを取り出したり、合計値を算出したり、などができます。

 

私は普段の仕事でSQLを使い「今日の販売実績」のレポートを作成したり、「原価の情報を抜き出し・加工」したりすることが多いですが、C#をもとにしたアプリでは、LINQを使います。

 

SQLLINQでは、データベースからデータを抽出・加工するという「やりたいこと」は同じですが、書き方が少し違います。ただ、似ている部分も多いので、SQLを既にご存じの方にとっては取っつきやすいのではないかと思います。

 

それでは早速LINQの種類とプログラム例をご紹介いたします(^^)

LINQの種類

先ほど、配列やコレクション、データベースに格納されているデータを簡単に整理する仕組みとして、LINQを利用するとご紹介しました。もちろん、LINQを使わずに、For やForeachを利用して書くこともできます。 どちらを使うかは好みかもしれません。

そんなLINQですが、書き方としては「クエリ構文」と「メソッド構文」の2種類あります

クエリ構文とメソッド構文は意味的には同じものですが、多くの人は、クエリ構文のほうがシンプルで読みやすいと感じるようです。

 

一方で、メソッド構文でしか実現できない処理があることや、他の言語への汎用性があることからメソッド構文を好む方もいるようです。前回紹介したラムダ式については、メソッド構文で使います(^^)

 では、実際の書き方についてみていきましょう。

クエリ構文

クエリ構文では、SQLと同じように、

Select(何をどのように表示するか)

From(どこからデータを取ってくるか)

Where(どのような条件でとってくるか)

Group by (どのようにグループ化するか)

Order by(どのような順番で表示するか)

を命令します。ただし、SQLと順番が違います。

 

■クエリ構文の書き方

Linqを利用する場合はname space "using System.Linq" に含まれているので、次のように宣言をする必要があります。

using System.Linq;

今回のプログラム例では、得点をscoresに格納して、そこから80点以上の点を全て表示させるというクエリを作成しました。

 

LINQのクエリ構文(from ~where ~ select)を書くことで、条件に当てはまるデータがgetscoreという変数に格納されます。

 

SQLと違うところは、from でデータソースからコピーして使うという点です。

"from コピー先 in データソース"という書き方になります。

■プログラム例

using System;

using System.Linq;



namespace LINQ_1

{

    class Program

    {

        static void Main()

        {

            // Data source.

            int[] scores = { 90, 71, 82, 93, 75, 82 };



            //80点以上の得点を抽出

            var getscore = from score in scores //scoresをscoreにコピー

                           where score>= 80     //80点以上

                           select score;    //scoreを選択



            foreach (int testScore in getscore)

            {

                Console.WriteLine(testScore);

            }

        }

    }

}

メソッド構文

クエリ構文と同じように、得点をscoresに格納して、そこから80点以下の点を全て表示させるというクエリを作成しました。

 

条件に合った要素だけ取り出す場合は、Whereメソッドを利用します。 

変数名.Where(ラムダ式)

 

その中で、前回の記事で紹介したラムダ式を使って"80点以下"を表現しています。

引数 =>戻り値(n <=80)の書き方ですね。

using System;

using System.Linq;



namespace LINQ_2

{

    class Program

    {

        static void Main()

        {

            // Data source.

            int[] scores = { 90, 71, 82, 93, 75, 82 };



            //80点以下の得点を抽出

            var getscore2 = scores.Where(n => n <= 80);



            foreach (int testScore2 in getscore2)

            {

                Console.WriteLine(testScore2);

            }

        }

    }

}

 

ラムダ式について復習したい方はこちらを参考にしてください。

 

クエリ型・メソッド型両者において、取り出した値はvar型に格納します。var型はint型やfloat型のように特定の型を表すものではなく、代入された値によってコンパイラが自動的に判断してくれます。

 

メソッド型について、さらに知りたい!という方はよく使うメソッド型について紹介しているので、是非こちらの記事を参考にしてください^^

it-rpa.hatenablog.com

ひとこと

いかがでしたでしょうか。LINQにはクエリ型とメソッド型があることと実際の書き方について紹介させていただきました。

 

今回の説明は「確かな力が身につくC# 「超」入門」を参考にさせていただきましたが、「もっと前から読んでおきたかった!」と痛感しています、、。もし、C#について学び始めたという方は是非参考にしてみてください!(2020年7月に出版された新書です(^^)

 

他にも、C#関連の記事を書いていますので是非参考にしてください!

◆合わせて読みたい◆