Я создал функцию для возврата случайного набора представлений в зависимости от суммы, переданной ей, но я беспокоюсь, что, хотя она работает теперь с небольшим количеством данных, когда большая сумма передается, она станет эффективны и вызывают проблемы.Есть ли более эффективный способ рандомизировать набор результатов LINQ?
Есть ли более эффективный способ сделать следующее?
public List<Submission> GetRandomWinners(int id)
{
List<Submission> submissions = new List<Submission>();
int amount = (DbContext().Competitions
.Where(s => s.CompetitionId == id).FirstOrDefault()).NumberWinners;
for (int i = 1 ; i <= amount; i++)
{
bool added = false;
while (!added)
{
bool found = false;
var randSubmissions = DbContext().Submissions
.Where(s => s.CompetitionId == id && s.CorrectAnswer).ToList();
int count = randSubmissions.Count();
int index = new Random().Next(count);
foreach (var sub in submissions)
{
if (sub == randSubmissions.Skip(index).FirstOrDefault())
found = true;
}
if (!found)
{
submissions.Add(randSubmissions.Skip(index).FirstOrDefault());
added = true;
}
}
}
return submissions;
}
Как я уже сказал, у меня есть эта полностью работающая и возвращающая желаемый результат. Просто мне не нравятся foreach
и while
чеки, и моя голова только что повернулась, чтобы попытаться придумать вышеупомянутое решение.