スポンサーリンク

[C# LINQ] Joinで内部結合

LINQのJoinメソッドを使うと指定した項目が同じ2つのコレクションを結合して新しいコレクションにすることができる。

Joinメソッドはちょっと複雑で引数が4つあります。
1つ目に結合するコレクション、2つ目に結合されるコレクションのキー項目を返すメソッド、3つ目に結合するコレクションのキー項目を返すメソッド、4つ目に結合された新しいコレクションの項目を返すメソッドを指定します。

こんな感じ、2つのリストのidが同じ要素をくっつけています。

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

class Program
{
    static void Main()
    {
        var nameList = new List<(int id, string name)> { 
            (1, "name1"),
            (2, "name2"),
            (3, "name3"),
            (4, "name4"),
            (5, "name5"),
        };
        var ageList = new List<(int id, int age)> { 
            (0, 100),
            (1, 10),
            (2, 20),
            (3, 33),
        };

        //Joinメソッドでキー項目(id)の一致する要素を結合
        var newList = nameList.Join(
            ageList,    //結合するリスト
            n => n.id,  //結合されるリストのキー
            a => a.id,  //結合するリストのキー
            (name, age) => (ID: name.id, Name: name.name, Age: age.age) //結合されたリスト達から新しい項目を返すところ
        );
        foreach (var n in newList)
        {
            Console.WriteLine(n);
        }
    }
}

2つのリストを結合してあたらしい項目を持ったタプルを返しています。

(1, name1, 10)
(2, name2, 20)
(3, name3, 33)

タプルの使い方についてはこちらの記事にまとめてあります。

[C# 入門] タプル(tuple)の使い方まとめ
今回はタプルについてです。わりと新しめの機能で、データ型の1つになります。タプル型の変数は一つの変数に複数の値を格納できます。これを使うとメソッドの戻り値に複数の値を返せるようになったりします。1つの変数で複数の値って配列...

¥3,520 (2022/04/28 19:09時点 | Amazon調べ)
¥2,750 (2022/04/28 19:18時点 | Amazon調べ)

C# プログラミング講座に戻る

コメント