Я думаю, что Linq для NHibernate не может преобразовать вызов Random.Next
в SQL ...
Можно было бы отсортировать результаты после , когда вы извлекаете их из БД:
var rand = new Random();
var query = from e in Session.Linq<Entity>
select e;
var result = from e in query.AsEnumerable()
orderby rand.Next(0,100)
select e;
Обратите внимание, что вам нужно использовать один экземпляр Random
, потому что начальное число основано на текущем количестве тиков; если вы создадите несколько экземпляров Random
с очень коротким интервалом, они будут иметь одинаковое начальное число и генерировать одинаковую последовательность.
В любом случае, сортировка коллекции по случайному числу не очень хорошая идея, потому что сортировка не будет стабильной и теоретически может длиться вечно. Если вам нужно перемешать результаты, вы можете использовать алгоритм Фишера-Йейтса :
var result = Session.Linq<Entity>().ToArray();
var rand = new Random();
for(int i = result.Length - 1; i > 0; i--)
{
int swapIndex = rand.Next(i + 1);
var tmp = result[i];
result[i] = result[swapIndex];
result[swapIndex] = tmp;
}