Получить НЕСКОЛЬКО случайных записей, используя Entity Framework? - PullRequest
0 голосов
/ 01 октября 2018

Я проверил этот ответ на вопрос и другие статьи о переполнении стека.Я предпочитаю метод Skip.Тем не менее, они все для одной записи.Теперь предположим, что я хочу взять 20 случайных записей из таблицы, как я могу это сделать?

Я пробую две возможности:

  1. Создать массив индексов и использоватьПропустить для каждого.Это, однако, приводит к 20 запросам (и каждый также упорядочен по Id).

  2. Получить список всех идентификаторов и выбрать случайным образом в массив и выполнить 2-й запрос для получения подробной информациивсе выбранные идентификаторы.

  3. Или просто используйте OrderBy, как предложено в другом посте.Я думаю, что это может быть плохо, потому что заказана вся таблица?

Скажите, пожалуйста, есть ли лучшее решение.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Упорядочение таблицы по рандомизированному гиду не оставит никаких эффектов на столе.Решение Linq достигает того, что вы хотите сделать.

private IEnumerable<MyClass> GetRandomItems(int n)
{
    return _dbContext.MyClass.OrderBy(x => Guid.NewGuid()).Take(n);
}
0 голосов
/ 01 октября 2018

Разве вы не можете использовать Stored Proc, чтобы сделать это для вас?

Итак, ваша задача StoredProcs - вернуть вызывающему абоненту 20 записей (я полагаю, это какой-то онлайн-экзамен: D)

на стороне sql вы можете использовать SQL Rand () для генерации случайных чисел для всех строк в вашей таблице.Затем упорядочите их по значениям Asc / Desc этого столбца Random и выберите 20 вершин.

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