【C#入門】『LINQ』の使い方サンプル【４つ紹介】

>この記事では、《LINQ》について、
業務を通して学習した内容を、備忘録としてまとめています。

- __『LINQ』&ensp;とは…？__
- __『LINQ』の使い方サンプル【４つ紹介】__

こういった内容についてまとめています。

__※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。__

## 『LINQ』&ensp;とは…？

__Language Integrated Query__ の略で、『リンク』と読みます。

公式サイト（MSDN）では、以下のように解説されています。（よく分からないです、、、）

>統合言語クエリ (LINQ) は、C# 言語への直接的なクエリ機能の統合に基づくテクノロジのセットの名前です。 これまでは、データに対するクエリは、コンパイル時の型チェックや IntelliSense のサポートがない単純な文字列として表現されてきました。 さらに、SQL データベース、XML ドキュメント、さまざまな Web サービスといったデータ ソースの種類ごとに、異なるクエリ言語を習得する必要がありました。 LINQ では、クエリは、クラス、メソッド、イベントと同様に、ファースト クラスの言語コンストラクトです。

>クエリを記述する開発者にとって、最も目立つ LINQ の "統合言語" 部分は、クエリ式です。 クエリ式は、宣言型の "クエリ構文" で記述されます。 クエリ構文を使用することで、フィルター処理、並べ替え、グループ化などのデータ ソースに対する操作を、最小限のコードで実行できます。 同一の基本的なクエリ式のパターンを使用して、SQL データベース、ADO .NET データセット、XML ドキュメントとストリーム、および .NET コレクション内のデータを照会して変換できます。

>参照：[https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/](https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/)


要は・・・

 『LINQ』は…

__コレクション（配列やリスト）に対して処理を行うメソッドを集めたライブラリ__で、

__これまで`foreach`などを使って、頑張って実装していた処理を代替__してくれます。

## サンプル①：&ensp;`Select`で`[]`で囲む文字列に変換

~~~program.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = new List<int>() { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };

            var changedNumber = number    
                                .Select(x => "[" + x + "]");

            foreach (var num in changedNumber)
            {
                Console.WriteLine(num);
            }
        }
    }
}
~~~

~~~
[10]
[20]
[30]
[40]
[50]
[60]
[70]
[80]
[90]
[100]
~~~

## サンプル②：&ensp;`Where`で条件指定

~~~program.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = new List<int>() { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };

            var selectedNumber = number    
                                 .Where(x => x > 50)

            foreach (var num in selectedNumber)
            {
                Console.WriteLine(num);
            }
        }
    }
}
~~~

~~~
60
70
80
90
100
~~~

## サンプル③：&ensp;`OrderBy`で並び順を変える

~~~program.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = new List<int>() { 20, 10, 40, 30, 60, 50, 80, 70, 100, 90 };

            var orderedNumber = number
                                .OrderBy(x => x) //.OrderByDescending(x => x)

            foreach (var num in orderedNumber)
            {
                Console.WriteLine(num);
            }
        }
    }
}
~~~

~~~
10
20
30
40
50
60
70
80
90
100
~~~

## サンプル④：&ensp;各種演算

~~~program.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = new List<int>() { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };

            Console.WriteLine("平均： " + number.Average());

            Console.WriteLine("合計： " + number.Sum());

            Console.WriteLine("最大値： " + number.Max());

            Console.WriteLine("最小値： " + number.Min());

            Console.WriteLine("要素数： " + number.Count());
        }
    }
}
~~~

~~~
平均： 55
合計： 550
最大値： 100
最小値： 10
要素数： 10
~~~