﻿# 如何讓 LINQ 支援亂數排序功能

從一個國外的討論區 ( [LINQ in Action forum](http://www.manning-sandbox.com/thread.jspa?threadID=22342&tstart=0) ) 得知一個在使用 LINQ 時的小技巧，可以在使用 LINQ to SQL 查詢的時候能有亂數排序的效果。

首先要讓 LINQ to SQL 能夠亂數排序必須先將環境設定好，以下有三個步驟要設定：

1\. 先在資料庫中建立一個檢視表(View)

> ```sql
> CREATE VIEW RandomView
> AS
> SELECT NEWID() As ID
> ```

2\. 再到資料庫中建立一個自訂函數(Function)

> ```sql
> CREATE FUNCTION GetNewId
> (
> )
> RETURNS uniqueidentifier
> AS
> BEGIN
> RETURN (SELECT ID FROM RandomView)
> END
> ```
> 
> P.S. 第一步驟是必要的，因為你沒辦法在 Function 中直接回傳一個 NEWID()

3\. 最後，把這個 GetNewId 函數拖曳到 LINQ to SQL Class Designer 中，之後就可以使用了！

至於使用的方法也很簡單，如下：

> ```csharp
> MyDataContext db =  new MyDataContext();
> 
> var pics = from p in db.Pictures
>                orderby db.GetNewId()
>                select p;
> ```

**相關連結**

-   [Forum: LINQ in Action](http://www.manning-sandbox.com/forum.jspa?forumID=302&start=0 "Forum: LINQ in Action")  
      
    
-   [Randomizing LINQ to SQL queries](https://weblogs.asp.net/fmarguerie/randomizing-linq-to-sql-queries "Randomizing LINQ to SQL queries")  
      
    
-   [NEWID (Transact-SQL)](http://technet.microsoft.com/zh-tw/library/ms190348.aspx "NEWID (T-SQL)")
