【发布时间】:2011-01-08 10:20:08
【问题描述】:
我已经创建了一个函数来根据传递给它的数量取回一组随机提交,但我担心即使它现在在传递大量数据时处理少量数据,它也会变得高效并引起问题。
有没有更有效的方法来做以下事情?
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 支票,我的头刚刚转向糊状,现在试图提出上述解决方案。
【问题讨论】: