一、問題描述
在EF中使用隨機排序出現的問題:LINQ to Entities does not recognize the method 'System.Guid NewId()' method, and this method cannot be translated into a store expression .
解釋就是:在使用 LINQ TO Entities 中生成的 sql 語句中找不到該 System.Guid NewId() 方法。畢竟在 sql 中確實不存在該函數。
二、解決思路
那就是從數據庫中取出數據,拿到數據在進行排序,返回到客戶端。
第一種使用 Random 隨機排序:
var query = BuildQuery(_infoRepository .GetAll() .PageBy(input) .ToListAsync() Random random = new Random(); var ent = (from q in query select new { q, r = random.Next(1, 10) }); var t = ent.OrderBy(x => x.r).Select(x => x.q).ToList();
第二種使用 Guid 隨機排序:
var query = BuildQuery(_infoRepository .GetAll(); var querySetTop = query.ToList().OrderBy(x => Guid.NewGuid());
先使用 ToList() 方法表示已經把數據從數據庫加載到客戶端了,在進行排序就ok了。