EF隨機查詢詳解

2021-07-10 01:58:29 字數 685 閱讀 2296

有一些業務上並不要求查詢出全部資料,而是隨機取出幾條資料,應用場景如下:

我要從一群人當中選擇1個人獲得獎金,為了保證每個人的公平性,必須採用隨機演算法

sql語法中,我們可以這樣寫

select top 1 *

from t

order by newid()

c#當中,可以用random類來獲取隨機數

ef當中,我們寫linq時,抑或是採用linq的擴充套件方法時,發現都沒有隨機排序的方法,這就要求我們自己去擴充套件了

引用自

/// /// sql函式的擴充套件類

///

public static class sqlfunctionextensions

#endregion

#region 擴充套件方法

/// /// 隨機排序擴充套件方法

///

///

///

///

public static iqueryableorderbynewid(this ienumerablesource)

#endregion

}

但是,這個方法方法有個缺點,如果是linq查詢未載入的iqueryable集合,則無效,必須先載入(用tolist或toarray)後再隨機排序

EF 隨機排序

資料上下文擴充套件 public partial class dbdatacontext iunitofwork 對於從linq to sql遷移過來的開發者,對隨機排序不會感到陌生,直接為datacontext新增乙個方法再配合反射就可以實現隨機排序了,如面所示 而對於linq to entity...

EF 分頁查詢

使用lambda表示式 建立上下文 datamodelcontainer dbcontext new datamodelcontainer 每頁5條資料,取第3頁的資料 var data dbcontext.userinfo where u u.id 1 orderby u u.id skip 5 ...

ef 查詢語法

1 無引數查詢 varmodel db.database.sqlquery select from userinfoes tolist 2 有參查詢 varmodel db.database.sqlquery select from userinfoes where id id newsqlpara...