私は、渡された量に応じてランダムな提出物を取り戻す機能を作りましたが、大量のデータが通過すると少量のデータでも機能しますが、効率的で問題を引き起こす。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
の小切手が好きではないと思っています。そして、私の頭は今、上記の解決策を見出そうとしています。