2010-01-28 32 views

Répondre

1

Je pense que la meilleure façon est la suivante. Exécutez une requête et obtenez le résultat en tant que IList. Puisque la liste retournée charge paresseusement l'objet (au moins en mode intégré), vous pouvez sélectionner des objets aléatoires par l'index.

Quelque chose comme ceci:

public static ICollection<T> RandomObjects<T>(IList<T> objectSet, int amount) 
    { 
     var resultSet = new HashSet<T>(); 
     var random = new Random(); 
     amount = Math.Min(objectSet.Count, amount); 
     while (resultSet.Count<amount) 
     { 
      resultSet.Add(objectSet[random.Next(amount)]); 
     } 
     return resultSet; 
    } 

Et puis l'utiliser:

IList<Person> potentialObjects = container.query(Person.class); 
    ICollection<Person> randomObject = RandomObjects(potentialObjects,10); 

Une autre possibilité serait de construire une LINQ-Query qui correspond au hasard. Cependant, une telle requête ne peut pas être optimisée, donc pourrait mal fonctionner.

var random = from Person p in dbc 
      where new Random().Next(2) == 1 
      select p; 

Edit: Changé à C#