[英]Random Orderby on subquery in LINQ
我有三個實體框架對象,測驗,問題和選項。 測驗有一組Question對象,而一個Question有一組Option對象。 我想從DBContext
返回指定測驗的隨機問題列表,每個問題應包括隨機排序的相關選項集合。
到目前為止,我已經能夠成功地獲得隨機問題列表,但是我無法隨機選擇問題的選項。
注意:我已經編寫了幾種不同的shuffling擴展方法,在這個例子中,為了簡單起見,我使用Guid進行排序。
var questions = db.Questions.Where(q => q.QuizId == quizId).Include(q => q.Options).OrderBy(a => Guid.NewGuid());
如何隨機隨機播放選項?
我不確定LINQ-to-SQL是否支持這種特定功能的轉換。 在你的靴子,如果我有對數據庫的訪問,我想創建像描述的存儲過程, 在這里對數據庫級別獲取隨機行。 雖然,這也是一個不理想的解決方案(見這個問題的接受答案)
您可以采用以下方法(假設您的問題少於MAXINT):
Random random;
var c = Questions.Count();
var randomNumbers = new List<int>();
var fetchedQuestions = new List<Question>();
var randomNumber = random.Next(1,c);
for (int i = 0; i < maxQuestions; i++) {
while (randomNumbers.Contains(randomNumber))
randomNumber = random.Next(1,c);
randomNumbers.Add(randomNumber);
fetchedQuestions.Add(Questions.ElementAt(randomNumber));
}
return fetchedQuestions;
即只生成一些隨機的唯一問題行號並獲取相應的行。
警告! 使用前需要優化 - 這是一個臟代碼原型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.