摘要: 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