筆者於2011/08/17發佈的《Orchard客製化:統計最多使用者的電子郵件信箱 》一文中,提供的範例程式可以依據使用者資料表的基本資料計算哪一個網域的電子郵件信箱的使用者人數排名第一。......筆者在此利用Generic Type與Extension Method重新改寫相關的程式碼,因此在Index方法之中僅有下列三行程式碼。
筆者於2011/08/17發佈的《Orchard客製化:統計最多使用者的電子郵件信箱
》一文中,提供的範例程式可以依據使用者資料表的基本資料計算哪一個網域的電子郵件信箱的使用者人數排名第一。但是該範例程式將所有計算的過程的程式碼一一寫入HomeController.cs之中的Index方法,導致程式碼外觀冗長,所以筆者在此利用Generic Type與Extension Method重新改寫相關的程式碼,因此在Index方法之中僅有下列三行程式碼。
string strMessage = _orchardServices.ContentManager.Query<UserPart, UserPartRecord>().List().MostPopularEmail(u => u.Email);
ViewBag.Message = strMessage;
return View("Analysis");
至於筆者使用Generic Type所撰寫的Extension Method的Message Signature如下:
public static string MostPopularEmail<TSource,TResult>(this IEnumerable<TSource> source, Expression<Func<TSource, TResult>> selector)
至於Message Signature的selector在範例程式碼中的使用方法如下:
Func<TSource, TResult> deleg = selector.Compile();
List<TResult> result = new List<TResult>();
foreach(TSource s in source){
TResult r = deleg(s);
result.Add(r);
}
參考資料:
Compiling Expression Trees
The Expression<TDelegate> type provides the Compile method that compiles the code represented by an expression tree into an executable delegate.
資料來源:
http://msdn.microsoft.com/en-us/library/bb397951.aspx
1.範例套件檔
Orchard.Module.Poemist.Analysis.1.0.zip
2.範例原始檔
Poemist.Analysis.zip