lambda expressions
Posted xiaohuomiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda expressions相关的知识,希望对你有一定的参考价值。
lambda:
Java lambda表达式是Java 8中的新增功能.Java lambda表达式是Java进入函数式编程的第一步。因此,Java lambda表达式是一个可以在不属于任何类的情况下创建的函数。Java lambda表达式可以作为对象传递,并按需执行。
Java lambda表达式通常用于实现简单的事件侦听器/回调,或者使用Java Streams API进行函数式编程。
lambda expressions的使用:
很多时候我们在使用Lambda表达式查询时,比如使用Lambda表达式查询用户数据,有时候会用电话或邮箱去查询用户信息,有时候又会用户名去查询用户信息
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分页之前必须先排序 分页代码如下
/// <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
以上是关于lambda expressions的主要内容,如果未能解决你的问题,请参考以下文章
Hacking Lambda Expressions in Java
JAVA 8 Lambda表达式-Lambda Expressions
Expression.Call 在简单的 lambda 表达式中。可能吗?
Expression.Compile 与 Lambda、直接与虚拟调用的性能