Génération de permutations à l'aide de LINQ

J'ai un ensemble de produits qui doit être planifiée. Il y a des P produits chaque indexés de 1 à P. Chaque produit peut être prévue dans un délai de 0 à T.-je besoin pour la construction de toutes les permutations de produits annexes qui satisfont la contrainte suivantes:

If p1.Index > p2.Index then p1.Schedule >= p2.Schedule.

J'ai du mal à construire l'itérateur. Je sais comment le faire via LINQ lorsque le nombre de produits est connu et constant, mais je ne suis pas sûr de savoir comment générer cette requête lorsque le nombre de produits est un paramètre d'entrée.

Idéalement, je voudrais utiliser le rendement de la syntaxe pour construire cet itérateur.

public class PotentialSchedule()
{
      public PotentialSchedule(int[] schedulePermutation)
      {
             _schedulePermutation = schedulePermutation;
      }
      private readonly int[] _schedulePermutation;
}


private int _numberProducts = ...;
public IEnumerator<PotentialSchedule> GetEnumerator()
{
     int[] permutation = new int[_numberProducts];
     //Generate all permutation combinations here -- how?
     yield return new PotentialSchedule(permutation);
}

EDIT: Exemple quand _numberProducts = 2

public IEnumerable<PotentialSchedule> GetEnumerator()
{
    var query = from p1 in Enumerable.Range(0,T)
                from p2 in Enumerable.Range(p2,T)
                select new { P1 = p1, P2 = p2};

    foreach (var result in query)
          yield return new PotentialSchedule(new int[] { result.P1, result.P2 });
}

source d'informationauteur cordialgerm