LINQ - 實作在 LINQ 中使用 Guid 來亂數排序

摘要: LINQ - 實作在 LINQ 中使用 Guid 來亂數排序

前一陣子專案當中有需要用到 Guid 來亂數排序,並且搭配 Take() 來取得特定的幾筆資料。這功能很常用的,以往都是使用 T-SQL 的方式來完成,奇與法為:Select * From TableName Order By NEWID() (ASC | DESC)。不過現在有 LINQ 這好東西,那要如何在 LINQ 中已達到這樣的功能呢!?以下就來實作一番...

資料庫:使用 Northwind 來當作此次實作的資料庫

LINQ 中使用 Guid 來亂數排序(一)

步驟一:在 資料庫 中,建立一個檢視表

Code:

--建立一個產生 Guid 的 View
CREATE VIEW RandomView
AS
SELECT NEWID() As ID



步驟二:在 資料庫 中,建立一個函式

Code:

--建立一個 Function 來回傳 View 中所產生的 Guid
CREATE FUNCTION GetNewId
(
)
RETURNS uniqueidentifier
AS
BEGIN
RETURN (SELECT ID FROM RandomView)
END



步驟三:在 專案 中建立一個 LINQ TO SQL,並且將 dbo.Employees 資料表 及 dbo.GetNewId 拉進 LINQ TO SQL 中



步驟四:佈一下畫面


步驟五:實作 LINQ 中使用 Guid 來亂數排序

Code:

MyDataContext db = new MyDataContext();

var result = from p in db.Employees orderby db.GetNewId() ascending select p;

dataGridView1.DataSource = result;

結果:執行了兩次,兩次出來的排序結果都不相同



LINQ 中使用 Guid 來亂數排序(二)

呆言呆語:說真的,有的人或許部怎麼習慣這樣做,有的人還是希望想之前的方式來做,以下就來實作比較傳統的作法...

Code:

MyDataContext db = new MyDataContext();

IEnumerable<Employees> result = db.ExecuteQuery<Employees>("Select * From dbo.Employees Order By NEWID() ASC");

dataGridView1.DataSource = result.ToList();

結果:當然結果跟之前是一樣的



呆言呆語:兩種方式我都覺得還不錯,就看實務上哪一種比較對您的味口嚕..

參考:
如何讓 LINQ 支援亂數排序功能
Randomizing LINQ to SQL queries