语法
lambda表达式包含下面几个要素:
1、逗号分隔的参数列表,如CheckPerson。test(Person p),其中p表示一个Person的对象实例

2、向右箭头 →, 箭头左侧是表达式入参,箭头右侧是表达式本身
3、表达式体,包含单个表达式或者一个语句块

public class SyntaxInstruction {

  public static void main(String[] args) {

List<Person> persons = PersonGenerator.generatePerons();
  printPerson(persons, p -> p.getAge() > 30 && p.getAge() < 50);
}

public static void printPerson(List<Person> persons, CheckPerson cp) {
  for(Person p : persons) {
    if(cp.test(p)) System.out.println(p);
  }
}
}

interface CheckPerson{
  public boolean test(Person p);
}

很多时候我们在使用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);
}

lambda expressions的更多相关文章

  1. C# Lambda Expressions 简介

    C# Lambda Expressions 简介 原文http://msdn2.microsoft.com/en-us/library/bb397687.aspx 翻译:朱之光 (larry1zhu@ ...

  2. jdk8新特性之lambda expressions

    本文分两部分: 语法简单说明 lambda的使用 注:这两部分内容均以类+注释的方式进行说明,并且内容均来自官方教程(https://docs.oracle.com/javase/tutorial/j ...

  3. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  4. 1.8 新特性之 Lambda Expressions

    Lambda expressions are allowed only at source level 1.8 or above The target type of this expression ...

  5. lambda expressions are not supported at this language level

    IDEA下报错:lambda expressions are not supported at this language level 解决: 1. File -> Project Struct ...

  6. ef中用lambda expressions时要注意(m=>m.id ==b ) 此时的b只能是基本的数据类型 。连属性都不能用

    ef中用lambda expressions时要注意(m=>m.id ==b ) 此时的b只能是基本的数据类型 .连属性都不能用

  7. Hacking Lambda Expressions in Java

    Hacking Lambda Expressions in Javahttps://dzone.com/articles/hacking-lambda-expressions-in-java At t ...

  8. 【104】Maven3.5.0结合eclipse使用,提示Lambda expressions are allowed only at source level 1.8 or above错误的解决方法

    错误重现 我的机器上安装了 maven 3.5.0,在 eclipse 中创建 maven 项目.pom.xml配置如下: <project xmlns="http://maven.a ...

  9. AS报错:lambda expressions are not supported at this language level

    AS报错:lambda expressions are not supported at this language level 解决方法 打开打开 File --> Project Stuct ...

  10. Lambda Expressions and Functional Interfaces: Tips and Best Practices

    转载自https://www.baeldung.com/java-8-lambda-expressions-tips 1. Overview   Now that Java 8 has reached ...

随机推荐

  1. 监控网络带宽 使用speedtest-cli命令

    1.监控网络带宽 使用speedtest-cli命令 l 安装命令: yum install python-pip –y pip install speedtest-cli l 运行命令: speed ...

  2. springBoot 自动配置原理--自己新建一个 starter

    上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单. springboot 中起着重要作用的是 start ...

  3. react抛物线小球实现

    .ballFather{ position: absolute; width: 15px; height: 15px; border-radius: 50%; transition: all 0.5s ...

  4. QTP自动化测试

    原文链接:https://www.cnblogs.com/xiezhidong/p/6784684.html ♣Qtp是什么? ♣测试用例网站    ♦注册与登录    ♦测试脚本       ◊录制 ...

  5. mysql安装杂记

    绿色版安装 先进入bin目录下初始化 命令:mysqld -initialize-insecure    mysqld --initialize --user=mysql --console    初 ...

  6. C++实现简单学生管理系统

    在网上看到的一个C++的小项目,我自己码了一遍,然后记录下我的理解以及像我这种菜鸟在整个过程中产生的问题. 我将我知道的尽可能详细的写下来,如有错误请联系我哈,QQ:920209178. 原文地址:h ...

  7. Mysql 8.0 导入txt文件操作(课程实验)

    一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件 ...

  8. vue----计算与监听属性

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...

  9. 序列化、time、random、hashlib、sys模块

    •很多常用和内置模块,我们只需要掌握他们的用法而暂时不用考虑内部是如何实现的,这些模块大大提升了开发效率 ! 1.json模块与pickle模块 •json 如果你有这样的困扰,当希望把一种数据存到硬 ...

  10. 20175202 《Java程序设计》第九周学习总结

    20175202 2018-2019-2 <Java程序设计>第九周学习总结 教材知识点总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称 ...