2010-01-28 3 views

ответ

1

Я думаю, что лучший способ - это. Запустите запрос и получите результат как IList. Поскольку возвращаемый список ленивы загружает объект (по крайней мере во встроенном режиме), вы можете выбрать случайные объекты по индексу.

Что-то вроде этого:

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; 
    } 

И затем использовать его:

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

Другой возможностью было бы построить LINQ-запроса, который случайным образом соответствует. Однако такой запрос не может быть оптимизирован, поэтому может произойти плохо.

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

Edit: изменен на C#

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