C# LINQの機能について

この記事を書いたチーム:frontier

はじめに

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

LINQ(Language Integrated Query)とは、C#コードの中で、SQLのようにコレクションデータに対して操作(検索・抽出・並び替えなど)を行う機能のことです。

コードの中でデータを絞ったり、並び替えたり、グループ化することができ、出力表示したいデータを簡単に操作したいときに便利です。SQL風の書き方 or メソッドチェーン(ラムダ式)で書く書き方があります。

LINQを使うためには、usingディレクティブを使ってSystem.Linqを参照する必要があります。

 

LINQの基本構文

SQL風クエリ構文

list の中から 10より大きい 要素だけを取り出して、昇順に並べたもの

 

メソッドチェーン構文(ラムダ式)

上記と同じ意味のメソッド形式(関数呼び出し)で書いたもの

 個人的にはラムダ式のほうが読み取りやすく、よく使われている印象があります。

 

よく使うLINQメソッドまとめ

メソッド名

役割

Where

条件に合うものを抽出する

Select

データを変換・取り出す

OrderBy / OrderByDescending

昇順・降順に並べる

GroupBy

グループ化する

Any

1件でも条件を満たすか判定

All

全部が条件を満たすか判定

FirstOrDefault

最初の1件を取り出す(なければnull

Count

件数を数える

Sum, Max, Min, Average

集計系メソッド

Join

内部結合

GroupJoin

外部結合

 

基本的な使用例 ()

◆フィルター(Where

 

◆取り出し(Select

 

◆ソート(OrderBy

 

◆グループ化(GroupBy

 

◆条件判定(Any / All

 

◆先頭取得(FirstOrDefault

 

◆ 内部結合(Join

リストのキーとモデルのプロパティ名を指定して、結合後の形を設定する。

 

◆ 外部結合(GroupJoin

C#LINQ標準では、Joinメソッドに「外部結合」は直接ないので、GroupJoin → SelectMany → DefaultIfEmpty を使って書きます。 
DefaultIfEmpty() は「マッチしなかったらnull」を返す。
Joinした後、値設定時にnullチェックして使う。※nullチェックを行う場合

さらに複数テーブルを外部結合する場合↓

 

まとめ

C# LINQSQLは全くの別物ですが、LINQ機能では「SQLみたいにコレクション操作」でき、SQL風構文 と メソッド構文(ラムダ式) が選べます。

ソース内で直感的に フィルター、並び替え、変換、集計 などができるので処理の流れが読み取りやすいかと思います。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス