SelectMany
拡張メソッドのみを使用して3つ以上のシーケンスのクロス結合を取得するために適用する最良の方法は何ですか?クロスジョインを取得する他の方法はありますか?
テストデータ
var a = Enumerable.Range(11, 2);
var b = Enumerable.Range(21, 2);
var c = Enumerable.Range(31, 2);
期待される結果
X Y Z
11 21 31
11 21 32
11 22 31
11 22 32
12 21 31
12 21 32
12 22 31
12 22 32
私が試したこと
動作するコードは次のとおりですが、読みやすく理解しやすい代替手段があるかどうか疑問に思います。
var d = a
.SelectMany(rb => b
.SelectMany(rc => c, (y, z) => new { Y = y, Z = z}),
(x, yz) => new { X = x, Y = yz.Y, Z = yz.Z });
同等のクエリ式は適切ですが、私が探しているものではありません。
var e = from x in a
from y in b
from z in c
select new { X = x, Y = y, Z = z };