C# 动态生成的查询?

C# 动态生成的查询?,c#,linq,C#,Linq,我想知道是否可以动态执行以下查询 var perms = from a in matrix[0] from b in matrix[1] from c in matrix[2] select new[] { a, b, c}; 矩阵是一个动态对象,我希望无论矩阵的维数如何,都能使用相同的查询 谢谢。是否需要将矩阵声明为动态?我认为此代码可以按照您的要求工作:

我想知道是否可以动态执行以下查询

        var perms = from a in matrix[0]
                    from b in matrix[1]
                    from c in matrix[2]
                    select new[] { a, b, c};
矩阵是一个动态对象,我希望无论矩阵的维数如何,都能使用相同的查询


谢谢。

是否需要将矩阵声明为
动态
?我认为此代码可以按照您的要求工作:

 var matrix = new int[3][] { new int[] { 1 }, new int[] { 2, 2 }, new int[] { 3, 3, 3 } };
 var perms = from a in matrix[0]
             from b in matrix[1]
             from c in matrix[2]
             select new[] { a, b, c };

您可以使用聚合器完成此操作:

IEnumerable<IEnumerable<int>> l = new[] { Enumerable.Empty<int>() };
var perms = matrix.Aggregate( l, (accumulator, seq) =>
  from a in accumulator from s in seq select a.Concat( new[] { s } ) );
IEnumerable l=new[]{Enumerable.Empty()};
var perms=矩阵聚合(l,(累加器,序列)=>
从累加器中的a和序列中的s中选择a.Concat(new[]{s});

我不太清楚你在问什么,普克……你的意思是如果
矩阵中有两个元素,你只会选择
a
b
,但如果它有三个元素,你会通过
d
等选择
a
。?或者在
矩阵中总是有三个元素,但其成员可能有不同维度的集合?对不起;矩阵实际上是一个[n][]对象。我得到的是n个不同大小的数组。我想要实现的是生成一个查询,该查询将动态地对内部数组进行所有排列。这个例子是针对三个内部数组的,我只想对矩阵[][]的大小进行一般性的处理。听起来好像你在问(或笛卡尔积)。另请参见:谢谢,这正是我需要的。很抱歉,我不够清楚。并不是说对象本身是动态的,我想说的是,我需要一个查询,可以“动态”地从三个“from”子句扩展到这些子句的一般数量(并创建一个新数组)。