Java lambda表達式是Java 8中的新增功能.Java lambda表達式是Java進入函數式編程的第一步。所以,Java lambda表達式是一個能夠在不屬於任何類的狀況下建立的函數。Java lambda表達式能夠做爲對象傳遞,並按需執行。html
Java lambda表達式一般用於實現簡單的事件偵聽器/回調,或者使用Java Streams API進行函數式編程。java
不少時候咱們在使用Lambda表達式查詢時,好比使用Lambda表達式查詢用戶數據,有時候會用電話或郵箱去查詢用戶信息,有時候又會用戶名去查詢用戶信息express
var user = db.Set<U_User>().Where(c => c.UserName = "nee32"); var user = db.Set<U_User>().Where(c => c.TelePhone = "13888888888");
其實查詢的結果都同樣,但惟一的區別就是Lambda表達式中的條件不同,那麼能不能只寫一個查詢方法,而實現Lambda表達式中Where的有查詢條件呢?答案固然是 能!例如在三層架構中使用一個方法知足使用多個條件查詢,代碼以下編程
public class UserDAL { /// <summary> /// 根據條件查找用戶列表 /// </summary> /// <param name="where"></param> /// <returns></returns> public List<U_User> FindAll(System.Linq.Expressions.Func<U_User, bool>> where = null) { using (EFContext db = new EFContext()) { if (where == null) return db.U_User.ToList(); else return db.U_User.Where(where).ToList(); } } }
聲明瞭一個FindAll方法,參數是可空的Lambda表達式(Expression<Func<U_User, bool>>表示一個Lambda表達式)架構
其中Func<U_User, bool>使用泛型委託 傳入U_User,返回一個bool值函數式編程
方法調用函數
public ActionResult Index() { //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32"); //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32" && c.Status == 1); List<U_User> userList = userBLL.FindAll(); return View(); }
使用Expression表達式分頁,注意 Linq分頁以前必須先排序 分頁代碼以下htm
/// <typeparam name="TKey">排序的字段類型</typeparam> /// <param name="pageIndex">當前頁</param> /// <param name="pageSize">每頁條數</param> /// <param name="orderby">排序字段 Lambda表達式</param> /// <param name="where">查詢條件 Lambda表達式</param> /// <returns></returns> public List<U_User> GetPageList<TKey>(int pageIndex, int pageSize, Expression<Func<U_User, TKey>> orderby,Expression<Func<U_User, bool>> where = null) { using (EFContext db = new EFContext()) { var query = from d in db.U_User select d; if (where != null) { query = query.Where(where); } var data = query.OrderBy(orderby) .Skip((pageIndex - 1) * pageSize) .Take(pageSize) .ToList(); return data; } }
分頁方法調用對象
public ActionResult Index() { List<U_User> userList = userBLL.GetPageList(1, 20, c => c.CreateTime, c => c.UserName == "nee32"); return View(userList); }
參考官網http://tutorials.jenkov.com/java/lambda-expressions.html