Список случайной сортировки с LINQ и Entity Framework - PullRequest
0 голосов
/ 17 марта 2010

Я видел много примеров в LINQ, но я не могу воспроизвести тот же результат в vb.net.

У меня есть следующий код:

Dim context As New MyModel.Entities()

Dim rnd As New System.Random()

Dim gardens As List(Of Tuin) = (From t In context.Gardens Where _
                                        t.Approved = True And _
                                        Not t.Famous = True _
                                        Order By rnd.Next() _
                                        Select t).ToList()

Но я получаю сообщение об ошибке при привязке этого списка к элементу управления.

LINQ to Entities не распознает метод Int32 Next () и этот метод не может быть переведен на магазинное выражение.

Любое предложение о том, как заставить это работать?

1 Ответ

2 голосов
/ 17 марта 2010

Вы не можете использовать объект Random в запросе подобным образом, поскольку объект существует в вашем VB-коде, а не в базе данных.

Сначала выведите результат в список, затем зашифруйте его. Гораздо эффективнее использовать алгоритм скремблирования, такой как Фишер-Йейтс / Кнут, чем сортировку по случайному значению:

Dim rnd as New Random()
For i As Integer = gardens.Count To 2 Step -1
  Dim pos As Integer = rnd.Next(i)
  Dim x = gardens(i - 1)
  gardens(i - 1) = gardens(pos)
  gardens(pos) = x
Next

Кроме того, для сортировки по случайному значению необходимо либо знать, что алгоритм сортировки никогда не будет переоценивать соотношение между двумя заданными элементами, либо вам необходимо присвоить случайное значение каждому элементу, чтобы он использовал то же значение на протяжении всей сортировки. Если бы метод, который вы попробовали, был бы возможен, вы могли бы получить тот же плохой результат, что и на странице Browser .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...