在 LINQ 內使用亂數排序
- 2008-12-18
- 13618
- 0
小鋪的首頁友站連結圖片跑馬燈是利用亂數排序的方法做的,之前是使用讀出來的資料丟到dataset後再做亂數排序,後來看了網路上的一些作法就發現了更讚的方式囉,這種常用的東西一定要紀錄的啦。
建議直接使用最下方介紹的 NewGuid() 來達到亂數排序的效果。
- http://www.dotblogs.com.tw/topcat/archive/2008/03/28/2343.aspx
- http://bibby.be/2008/11/10.html
- http://blog.miniasp.com/post/2008/03/Randomizing-LINQ-to-SQL-queries.aspx
以上三種方法的寫法都很棒,剛好demo正在學習LINQ所以就選擇了保哥的範例來實做,先建立一個檢視表(view)內容如下
SELECT fw_imgUrl,NEWID() AS id, fw_webName FROM dbo.friendWeb
利用NEWID()產生一個類似guid的不規則值,並且每次執行都會重新產生一次
然後利用LINQ讀取出來就好啦
dcFriendWebDataContext dc = new dcFriendWebDataContext(); var emps = from p in dc.viewShowFriendImg orderby p.id select new { p.fw_imgUrl,p.fw_webName };
因為p.id是利用NEWID()產生出來的亂數,所以拿p.id來排序就可以達到亂數排序的需求
不過後來覺得這樣實在是太麻煩了,所以還是直接使用
var items=Enumerable.Range(0,50).OrderBy(d=>Guid.NewGuid());
這樣子的寫法,利用 NewGuid() 來達到亂數排序,而且效能十分的高
回應討論