使用linq交叉连接未知数量的字符串数组

Ask*_*ken 5 c# linq cross-join

是否可以使用 linq 进行交叉连接,其中连接数事先未知?

我有这个:

var arrays = new List<string[]>();
Run Code Online (Sandbox Code Playgroud)

如果我知道我可以做三个列表:

var oQuery = from x in arrays[0]
    from y in arrays[1]
    from z in arrays[2]
    select new {x, y, z};
Run Code Online (Sandbox Code Playgroud)

是否可以n使用 linq连接字符串数组?

小智 1

请尝试以下解决方案来获取给定“N”个字符串数组的笛卡尔积。

    static void Main(string[] args)
    {

        var arrays = new List<string[]>();
        var arr1 = new string[] { "A", "B", "C" };
        var arr2 = new string[] { "D", "E", "F" };
        var arr3 = new string[] { "G", "H", "I" };
        arrays.Add(arr1);
        arrays.Add(arr2);
        arrays.Add(arr3);

        IEnumerable<Tuple<string,string>> oQuery1 = null;
        int count = arrays.Count;
        var k = arrays[0].AsEnumerable();
        for (int i =1; i< count; i++)
        {
            var l1 = arrays[i];

            oQuery1 =  k.SelectMany((x) => l1, (x, y) => Tuple.Create( x, y ));
            k = oQuery1.Select(x=>x.ToString());
        }
}
Run Code Online (Sandbox Code Playgroud)