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 ...
随机推荐
- tomcat免安装版做成windows系统服务
安装服务在命令行中进入/Tomcat路径/bin/,执行“service.bat install”:卸载服务在命令行中进入/Tomcat路径/bin/,执行“service.bat remove”:
- redis命令List类型(六)
Arraylist和linkedlist的区别?? Arraylist是使用数组来存储数据,特点:查询快.增删慢 Linkedlist是使用双向链表存储数据,特点:增删快.查询慢,但是查询链表两端的数 ...
- 双网卡绑定一个IP--bond
双网卡绑定一个IP 步骤1:新建/etc/sysconfig/network-scripts/ifcfg-bond0文件 DEVICE=bond0 ONBOOT=yes BOOTPROTO=stati ...
- MS Sql Server 查询数据库中所有表数据量
方法一: SELECT a.name,b.rows FROM sysobjects a INNER JOIN sysindexes b ON a.id=b.id ,) AND a.Type='u' O ...
- Tecplot: 多截面云图显示
[原创]禁止转载,需要转载请联系作者 想要使用Tecplot显示图1中这样一张云图,即删除掉接近0的一些正负的压力值,尝试了多种方法后成功实现: 图1 多截面云图显示 问题:如何去掉 -0.3< ...
- hyperscan应用参数
>>hs_compile_ext_multi 使用额外的参数编译表达式, 额外的参数包括: MIN_OFFSET 距离开始的最小偏移开始匹配 MAX_OFFSET 距离开始的最大偏移结束匹 ...
- mock数据,尽量随机,采用中间表的方式实现
开发平台上的sql不能超过1000行,而为了插入尽可能随机的数据,sql比较长---插入一行数据就需要执行80行sql,因此执行insert into mall_data.dtw_mall2_tmp ...
- myEclipse出现cannot paste the clipboard contents into the selected elements报错
导入jar包报错,cannot paste the clipboard contents into the selected elements,查阅资料让重新打开工程,但依然报错. 最后在本地路径复制 ...
- Jenkins可持续集成项目搭建——配置Jenkins基本设置 & 运行脚本报错点
一.系统管理->全局工具配置:配置JDK.GIT: 二.项目配置-部署源码管理的远程地址 三.项目配置-构建触发器(以Windows平台举例) 构建项目时,会自动分配一个运行空间(D:\Prog ...
- 学习笔记TF065:TensorFlowOnSpark
Hadoop生态大数据系统分为Yam. HDFS.MapReduce计算框架.TensorFlow分布式相当于MapReduce计算框架,Kubernetes相当于Yam调度系统.TensorFlow ...