0
我正在構建一個asp.net核心webapp,現在我需要從數據庫中收集一個隨機行(sql)以便在其中一個視圖中發佈。非常感謝任何幫助,我可以做和理解這一點。代碼,解釋,鏈接到帖子,enything是有用的。通過EF得到一個隨機行
我並不完全瞭解EF-asp.net核心是如何工作的,所以這就是真正難以搜索與我的問題相關的帖子的原因。
預先感謝您。
/彼得
我正在構建一個asp.net核心webapp,現在我需要從數據庫中收集一個隨機行(sql)以便在其中一個視圖中發佈。非常感謝任何幫助,我可以做和理解這一點。代碼,解釋,鏈接到帖子,enything是有用的。通過EF得到一個隨機行
我並不完全瞭解EF-asp.net核心是如何工作的,所以這就是真正難以搜索與我的問題相關的帖子的原因。
預先感謝您。
/彼得
由於您使用EF,我會爲您提供一個LINQ解決方案。
int total = context.YourEntities.Count();
Random r = new Random();
int offset = r.Next(0, total);
var result = context.YourEntities.Skip(offset).FirstOrDefault();
所有這些代碼都是獲取記錄總數,並在[0,total)之間生成一個隨機數。請注意邊界類型:從低端開始包含,不包括高端。
您使用此隨機數作爲「偏移」,即要跳過多少記錄(.Skip(offset)
),然後檢索序列其餘部分的第一個元素。如果根本沒有記錄,FirstOrDefault
返回null
。
非常感謝!幾個後續問題:1)這是否可以在更大的數據庫中工作?2)如果要將此片段放入存儲庫中的某個函數中,該函數將具有哪種類型? – Dustlab
1)取決於數據庫供應商。有了MSSQL,我確信這是有效率的,因爲有T-SQL構造用於分頁,但是,例如,使用Oracle時,我最後一次使用它時,必須弄亂ROWNUM和其他愚蠢的事情才能獲得第n個記錄需要你在子查詢中首先選擇整個表(儘管我認爲它仍然可以利用一些優化,但是Oracle不是我喜歡的技術之一,而且我很不瞭解它)。 2)你的意思是什麼類型?什麼返回類型?當然,特定存儲庫擁有的實體的類型。 –
2)沒關係。我不知道我的大腦在那裏發生了什麼......再次感謝您的幫助! – Dustlab