lambda expressions
语法
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的更多相关文章
- C# Lambda Expressions 简介
C# Lambda Expressions 简介 原文http://msdn2.microsoft.com/en-us/library/bb397687.aspx 翻译:朱之光 (larry1zhu@ ...
- jdk8新特性之lambda expressions
本文分两部分: 语法简单说明 lambda的使用 注:这两部分内容均以类+注释的方式进行说明,并且内容均来自官方教程(https://docs.oracle.com/javase/tutorial/j ...
- java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)
2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...
- 1.8 新特性之 Lambda Expressions
Lambda expressions are allowed only at source level 1.8 or above The target type of this expression ...
- lambda expressions are not supported at this language level
IDEA下报错:lambda expressions are not supported at this language level 解决: 1. File -> Project Struct ...
- ef中用lambda expressions时要注意(m=>m.id ==b ) 此时的b只能是基本的数据类型 。连属性都不能用
ef中用lambda expressions时要注意(m=>m.id ==b ) 此时的b只能是基本的数据类型 .连属性都不能用
- Hacking Lambda Expressions in Java
Hacking Lambda Expressions in Javahttps://dzone.com/articles/hacking-lambda-expressions-in-java At t ...
- 【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 ...
- AS报错:lambda expressions are not supported at this language level
AS报错:lambda expressions are not supported at this language level 解决方法 打开打开 File --> Project Stuct ...
- 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 ...
随机推荐
- python 将汉字转换为拼音
xpinyin提供把汉字转为汉语拼音的功能. 安装此模块 pip install xpinyin简单用例: from xpinyin import Pinyin pin = Pinyin() test ...
- 前端---JQuery初识
---恢复内容开始--- BOM JQuery认识 JQuery基本选择器 JQuery高级选择器 1.javascript基础部分包括三个部分: ECMAScript:JavaScript的语法标准 ...
- mybatis:Parameter 'ids' not found.
https://www.cnblogs.com/baby-lijun/p/5908088.html ps:根本原因就是他们根本就没有理解foreach里面的collection应该放什么东西,错误的理 ...
- java第三章笔记
java的基本程序设计结构: 1. 声明一个变量之后,必须用赋值语句对变量进行显示初始化,千万不能使用未被初始化的变量. 2.在java中不区分变量的声明与定义. 3.当参与/运算的两个操作数都是整数 ...
- explain和profiling分析查询SQL时间
mysql可以通过profiling命令查看到执行查询SQL消耗的时间. 默认情况下,mysql是关闭profiling的,命令: select @@profiling; +------------- ...
- c/c++的常用函数和STL使用
一个超好用的c++网站:http://www.cplusplus.com/reference/string/string/erase/ 一.函数头中包含的函数 1.qsort函数对数组.结构体等进行排 ...
- MFC中给各个控件填充背景颜色的方法
1.给程序设置大背景色,在OnPaint()函数中添加如下代码: CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRec ...
- 单线拨号上网时RouterOS内网端口映射的配置
很多时候routeros 是通过单线拨号上网,假设PPP接口名为pppoe-out1 若需要添加内网ip=18.16.1.92主机的3389端口映射 ,可以在命令行键入: ip firewall na ...
- C/C++ 控制台字体的变颜变色
先扔一个链接上来,因为怕忘: https://blog.csdn.net/stude/article/details/7645056 https://blog.csdn.net/lindorx/art ...
- java_oop_接口
接口 难的是在系统设计里怎么样使用接口,主要在语法,不在系统架构与设计 概念 声明 语法 只有抽象方法的抽象类?可以用接口来表示,用接口来代替这样的抽象类,是因为 ...