我發現這個方便的查詢;LINQ2SQL獲取隨機記錄
SELECT TOP 1 * FROM Advertising ORDER BY NEWID()
但需要把它變成一個LINQ
查詢。
我試着做類似的事情;
var a = (from record in Advertising
select record)
但無法弄清楚如何進行排序以便返回一個隨機記錄。
我發現這個方便的查詢;LINQ2SQL獲取隨機記錄
SELECT TOP 1 * FROM Advertising ORDER BY NEWID()
但需要把它變成一個LINQ
查詢。
我試着做類似的事情;
var a = (from record in Advertising
select record)
但無法弄清楚如何進行排序以便返回一個隨機記錄。
這是最簡單的可能只是直接執行命令。
var a = ctx.ExecuteQuery<Advertising>("select top 1 * from Advertising order by NEWID()").First();
你也可以用存儲過程做到這一點,或者如果你想要一個完全通用的方法來做到這一點,您可以查詢計數,然後生成在該範圍內的隨機數,蹦跳。 (正如其他人注意到,當我正在打字)
這不會產生你正在尋找的SQL,而應返回一個隨機的結果,而無需檢索所有記錄:
Random r = new Random();
var record = r.Next(Advertising.Count());
var randomRecord = Advertising.Skip(record).FirstOrDefault(1);
編輯:這也應該是比隨機排序更有效(除非SQL Server優化排序)
編輯2:取(1)應該是FirstOrDefault()返回一條記錄,而不是一條記錄長1條記錄。
做兩個查詢。 –
@MichaelStum它真的很重要,如果它是兩個查詢? –
這可能並不理想,但會得到期望的結果,而且我不確定如何在單個查詢中執行此操作。這很複雜,因爲只有某些C#方法具有到SQL的映射。希望別人會有更好的解決方案,如果這是一個要求。 – TheEvilPenguin
這裏是我的一些隨機的方法
Public Shared Function GetSingleRandom(Of T)(ByVal target As IEnumerable(Of T)) As T
Dim r As New Random(DateTime.Now.Millisecond)
Dim position As Integer = r.Next(target.Count)
Return target.ElementAt(position)
End Function
可能的重複:http://stackoverflow.com/questions/648196/random-row-from-linq-to-sql – Polity
也見:http:// weblogs。 asp.net/zeeshanhirani/archive/2008/07/23/returning-random-products-using-linq-to-sql.aspx – Polity
關於可能的重複,我無法讓.Random()來工作 – griegs