Jak wygenerować iloczyn kartezjański w C#

Iloczyn kartezjański czyli iloczyn dwóch zbiorów. Załóżmy, że masz te dwie listy:
{X, Y, Z} i {1, 2, 3}
Iloczyn kartezjański z dwóch list byłby następujący:
{(X,1), (X,2), (X,3), (Y,1), (Y,2), (Y,3), (Z,1), (Z,2), ( Z,3)}
Poniżej przedstawiam jak to osiągnąć przy pomocy LINQ i metody SelectMany:
using System;
using System.Linq;
public class CartesianProduct
{
public static void Main(string[] args)
{
string[] firstArray = new string[] {"X", "Y", "Z"};
string[] secondArray = new string[] {"1", "2", "3"};
var cartesianProduct = firstArray.SelectMany(a => secondArray.Select(b => $"{a}{b}"));
foreach (string element in cartesianProduct) {
Console.WriteLine(element);
}
}
}