2012-04-28 3 views
0

Мне интересно, могу ли я выполнить следующий запрос динамически.динамически сгенерированный запрос?

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

матрица - динамический объект, и я хотел бы иметь тот же запрос, независимо от размеров матрицы.

Спасибо.

+2

Я не совсем уверен, что вы просите, Puhek ... Вы имеете в виду, что если в 'matrix' есть два элемента, вы должны выбрать только' a' и 'b', но если в нем есть три элемента, вы должны выбрать' a' через 'd' и т. д.? Или всегда есть три элемента в 'matrix', но его члены могут иметь коллекции разных размеров? –

+1

почему бы вам не попробовать? –

+0

извините; Матрица на самом деле является объектом [n] []. Итак, у меня есть n массивов с разным размером. То, что я хотел бы достичь, - сделать запрос, который будет динамически выполнять все перестановки на внутренних массивах. В примере это делается для трех внутренних массивов, и я бы просто хотел, чтобы это делалось в целом для любого размера Matrix [] []. – Puhek

ответ

1

Вы можете сделать это с помощью агрегатора:

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 })); 
+0

Спасибо! Это будет сделано. – Puhek

0

Необходимо ли объявлять матрицу как 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 }; 
+0

Жаль, что я не был достаточно ясен. Дело не в том, что сам объект динамичен, я хотел сказать, что мне нужен запрос, который будет «динамически» расширяться от трех предложений «от» к общему числу этих (и создавать новый массив). – Puhek

Смежные вопросы