Я пишу этот метод переопределений:
public static IEnumerable<T> Randomize<T>(this IEnumerable<T> items) where T : class
{
int max = items.Count();
var secuencia = Enumerable.Range(1, max).OrderBy(n => n * n * (new Random()).Next());
return ListOrder<T>(items, secuencia.ToArray());
}
private static IEnumerable<T> ListOrder<T>(IEnumerable<T> items, int[] secuencia) where T : class
{
List<T> newList = new List<T>();
int count = 0;
foreach (var seed in count > 0 ? secuencia.Skip(1) : secuencia.Skip(0))
{
newList.Add(items.ElementAt(seed - 1));
count++;
}
return newList.AsEnumerable<T>();
}
Тогда у меня есть список источников (все предметы)
var listSource = p.Session.QueryOver<Listado>(() => pl)
.Where(...);
Наконец, я звоню «Рандомизировать» и получаю случайную подгруппу предметов, в моем случае 5 предметов:
var SubCollection = Randomize(listSource.List()).Take(5).ToList();