Множественный случайный выбор Linq - PullRequest
0 голосов
/ 30 января 2020

У меня есть Questions таблица и список CategoryIds. Я должен получить один вопрос от каждого CategoryId в случайном порядке. Сейчас я делаю так:

var randomQuestions = new List<Question>();
foreach(int id in categoryIds){

randomQuestions.add(questions.Where(o => o.CategoryId== id).OrderBy(o => Guid.NewGuid()).FirstOrDefault());
}

Но есть ли способ сделать это только с Linq? Спасибо

1 Ответ

3 голосов
/ 30 января 2020

Это должно сделать то, что вы хотите в одном запросе

var randomQuestions = questions
    .Where(q => categoryIds.Contains(q.CategoryId))
    .GroupBy(q = > q.CategoryId)
    .Select(grp => grp.OrderBy(_ => Guid.NewGuid()).First())
    .ToList();

Это сначала отфильтрует только вопросы по интересующим вас категориям, затем сгруппирует по идентификатору категории и для каждой группы случайным образом выберет один.

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