[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)

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


LINQ関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次