簡體   English   中英

LINQ中子查詢的隨機Orderby

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM