lambda expressions

本文介绍了Java lambda表达式,它是Java 8新增功能,是Java进入函数式编程的第一步,可作为对象传递并按需执行,常用于实现简单事件侦听器等。还讲述了lambda expressions的使用,如在三层架构中用一个方法实现多条件查询,以及使用Expression表达式分页。

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

转载于:https://www.cnblogs.com/xiaohuomiao/p/11040555.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值