我想知道是否可以动态地执行以下查询。动态生成查询?
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};
矩阵是一个动态的对象,我想有相同的查询工作,无论矩阵的大小。
谢谢。
可以使用一个聚合器实现这一点:
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 }));
谢谢!这会做。 – Puhek 2012-04-28 21:42:49
是否需要声明矩阵为dynamic
?我觉得这个代码的工作,只要你想:
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 };
对不起,我还不够清楚。并不是说对象本身是动态的,我想说我需要一个能够从三个“from”子句“动态”扩展到一般数量(并创建一个新数组)的查询。 – Puhek 2012-04-28 21:02:09
我不完全知道你是问什么,Puhek ......你的意思是如果'matrix'中有两个元素,你只能选择'a'和'b',但如果它有三个元素,你可以选择'a'到'd'等。或者'矩阵'中总是存在三个元素,但其成员可能具有不同维度的集合? – 2012-04-28 20:36:35
你为什么不尝试一下? – 2012-04-28 20:41:28
对不起;矩阵实际上是一个[n] []对象。所以我得到的是n个不同大小的数组。我想要做的是做一个查询,动态地做内部数组上的所有排列。这个例子是为三个内部数组做的,我只是希望通常对任何Matrix [] []大小进行。 – Puhek 2012-04-28 20:59:22