У меня есть эта функция:
/// <summary>
/// Returns an array of random articles, ID and titles only
/// </summary>
/// <param name="SectionID">Section ID to return</param>
/// <param name="Count">Number of articles to return</param>
/// <returns></returns>
public ArticleOverview[] RandomArticles(int SectionID, int Count)
{
ArticleOverview[] ReturnLinks;
// Pick a random tutorial and redirect to it
using (MainContext db = new MainContext())
{
// Select rows
var q = (from c in db.tblArticles where c.IsDeleted == false && c.SectionID == SectionID select new { c.ID, c.Title });
int count = q.Count();
int index = new Random().Next(count);
var Articles = q.Skip(index).Take(Count);
// Size array
ReturnLinks = new ArticleOverview[Articles.Count()];
int InsertIx = 0;
foreach (var Rec in Articles)
{
ReturnLinks[InsertIx] = new ArticleOverview(Rec.ID, Rec.Title, SectionID);
InsertIx++;
}
}
return ReturnLinks;
}
У этого метода есть две проблемы:
- Если он выберет одну из последних записей, он вернет меньше записей больше, чем предполагалось, т.е. если число наборов записей равно 100, и мы выбираем 10 записей, и он возвращает индекс 95, он вернет только 5 записей, а не 10
- Возвращенные записи упорядочены, они не перемешаны.Возвращенные записи должны быть рандомизированы и не упорядочены, поскольку они последовательно существуют в базе данных.
Спасибо за любую помощь!Я использую SQL Server Express 2008 R2.