複数のデータソースを使用する

プログラミングC# 第6版 8.3.5.2


複数のデータソースを処理する。fromをつなげて処理する感じですね。

using System;
using System.Linq;

class Program {
    static void Main() {
        int[][] nums = new int[][] {
            new int[]{1,2,3},
            new int[]{10,20,30},
            new int[]{100,200,300},
        };
        
        var ret = from n1 in nums
                  from n2 in n1
                  select n2;
        
        foreach(var n in ret) {
            Console.WriteLine("{0}",n);
        }
    }
}
$ main
1
2
3
10
20
30
100
200
300

例としては微妙ですが、単にジャグ配列を全表示してるだけですね。

他の例として

using System;
using System.Linq;

class Program {
    static void Main() {
        int[] nums1 = new int[] {1,2,3,4,5};
        int[] nums2 = new int[] {5,6,7};
        
        // 二つの配列の加算
        var ret = from n1 in nums1
                  from n2 in nums2
                  select n1 + n2;
        
        foreach(var n in ret) {
            Console.WriteLine("{0}",n);
        }
    }
}
$ main
6
7
8
7
8
9
8
9
10
9
10
11
10
11
12

こんなかんじ。

メソッドを使う場合はSelectManyを利用する。

上記処理をSelectManyで書き直すと

        // 二つの配列の加算
        var ret = nums1.SelectMany( x => nums2, (x,y) => x + y );

こうなる。