選擇n個隨機行我知道運行常規的SQL命令時,使用通過LINQ2SQL
ORDER BY NEWID()
功能。我想要做同樣的事情,但通過linq2sql。
我寧願不到選擇整個範圍內,通過rnd.Next添加一個隨機數(),然後進行排序,最後...
選擇n個隨機行我知道運行常規的SQL命令時,使用通過LINQ2SQL
ORDER BY NEWID()
功能。我想要做同樣的事情,但通過linq2sql。
我寧願不到選擇整個範圍內,通過rnd.Next添加一個隨機數(),然後進行排序,最後...
Marc Gravell發佈了一個solution here,它允許您定義一個在DataContext的分部類中使用NEWID的函數。不要將其放置在生成的DataContext類中,否則將來的更新會消除您添加的內容。
Marc展示瞭如何在查詢表達式語法中使用它。或者,使用點符號,可以這樣寫:
var results = dc.Table.OrderBy(r => dc.Random()).Take(n);
如果您不熟悉創建部分類,只需向解決方案中添加一個新類即可。只要類定義使用帶有partial
關鍵字的DataContext類名稱,它的名稱就無關緊要。例如,如果你的DataContext被命名爲XYZDataContext
您可以添加一個名爲XYZDataContextPartial.cs
新類,並把它定義爲:
namespace YourNamespace
{
public partial class XYZDataContext
{
}
}
嘗試Take
擴展方法:
.OrderBy(x=>x.NewId)
.Take(randomNumber);
我們在這裏所做的是:在ASC爲了
如果您希望爲了是隨機的,試試這個:
.OrderBy(x => Guid.NewGuid())
.Take(20);
我們在這裏所做的是:
完美!馬克的解決方案完全按照我的意願工作。 – benpage 2010-03-03 22:45:29