语法
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. c# 在.NET使用Newtonsoft.Json转换,读取,写入json

    转自:http://blog.sina.com.cn/s/blog_70686f3a0101kemg.html  首先,大家要明白什么是json,了解更多关于json方面资料大家可以点击https:/ ...

  2. GitHub看板系统(Project)

    /********************************************************************** * GitHub看板系统(Project) * 说明: ...

  3. Android应用程序启动过程

    有没有想过,当我们点击桌面应用程序图标是怎样打开APP启动应用程序的呢? 当我们点击应用图标会调用Launcher的startActivitySafely()方法,方法实现如下,其实是调用的start ...

  4. python 7

    一.数据类型的补充 1.元组 tu1 = ('大海') tu2 = ('大海',) print(tu1, type(tu1), tu2, type(tu2)) 大海 <class 'str'&g ...

  5. 新 radio样式修改

    https://blog.csdn.net/qq_41617704/article/details/80973966

  6. conts、var 、let的区别

    1.const定义的变量不可以直接修改,通过 this.a = 'kkk' 进行修改, 而且必须初始化. 2.var定义的变量可以修改,如果不初始化会输出undefined 3.let是块级作用域,函 ...

  7. viewport定义,弹性布局,响应式布局及LESS和SASS框架应用

    一,移动端宽度设置 viewport视图窗口,<meta name="viewport" content="width=device-width,initial-s ...

  8. 移动端单位rem计算

    !(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...

  9. C# 关于变量使用范围容易犯错的问题(TreeView数据绑定为例)

    asp.net做一个treeview数据绑定 绑定子节点时查询出来的数据正确,但在进行数据绑定时一直索引溢出 然后调试 ... 调试 ... 再调试... 依然很崩溃  想到了是变量定义后面共用后的问 ...

  10. 常用的几个CSS前端效果

    做页面需要一定的CSS基本功,虽然现在有很多成熟的框架如bootstrap等,我们轻松的就就可以做出一些页面效果.但是掌握每一个常见效果的写法还是很重要的,下面整理出一些常见的CSS前端效果,让你更轻 ...