天天看點

EF架構~linq to entity的随機排序問題

對于從linq to sql遷移過來的開發者,對随機排序不會感到陌生,直接為datacontext添加一個方法再配合反射就可以實作随機排序了,代碼如下:

而對于linq to entity的開發者們就不能使用上面的方法了,因為dbcontext沒有ExecuteMethodCall這個方法,呵呵,隻有自己想轍了,事實上,對于system.Data.Entity空間裡有一個EdmFunction的特性,它與linq to sql裡的Function特性類似,都是辨別類為函數,就是使用資料源的某個函數,如Sqlserver的newid函數,我們可以把它思路整理一下,代碼就出來了,我們像它種與領域無關的代碼放在core項目裡,表示為公用代碼

而為了使開發者在使用上方法,我們把NewId作成IEnumerable接口的擴充方法,這樣無論是IQueryable還是IList,List集合都可以直接使用它了,看代碼

而使用了IEnumerable的集合擴充後,它是否還有延時加載的特性,通過我們的檢測,答案是肯定的,它是延時的,下面是我們的例子

結果如下:

EF架構~linq to entity的随機排序問題

而進行資料庫檢測的結果,出是令我們滿意的,隻取了5條資料

EF架構~linq to entity的随機排序問題

 OK,到這種使用linq to entity(entity frameworks環境下)的随機排序就介紹到這裡,謝謝閱讀!