Если N фиксировано, например N = 3, то это легко, я могу использовать вложенные циклы глубины 3. например.
from i in Enumerable.Range(0, 2)
from j in Enumerable.Range(0, 2)
from k in Enumerable.Range(0, 2)
select new int[] { i, j, k };
а если N переменная?