Linq 表达
Lambda 简单了解
//Lambda //匿名方法
//delegate (Student s) { return s.Age > 12 && s.Age < 20; };
//Lable 表达式 (代替了上面的)
//s => s.Age > 12 && s.Age < 20 //在Lambda Expression 中指定多个参数
//(s, youngAge) => s.Age >= youngage;
//指定参数类型
//(Student s, int youngAge) => s.Age >= youngage; //没有参数的Lambda表达式
//() => Console.WriteLine("Parameter less lambda expression") //多语句Lambda表达式
//(s, youngAge) =>
//{
// Console.WriteLine("Lambda expression with multiple statements in the body");
// Return s.Age >= youngAge;
//}
将Lambda表达式分配给委派
lambda表达式可以分配给Func<in T, out TResult>
类型委托。Func
委托中的最后一个参数类型是返回类型,其余是输入参数。而Action<int T> 类型委托,只有输入参数,不返回。
例如:
Func<Student, bool> isStudentTeenAger = x => x.Age > && x.Age < ;
Student std = new Student { Age = };
bool isTeen = isStudentTeenAger(std);//false
这个委托我们可以来用方法表示
bool isStudentTeenAger(Student s)
{
return s.Age > && s.Age < ;
}
Action:
Action<Student> PrintStudentDetail = s => Console.WriteLine("Name: {0}, Age: {1} ", s.StudentName, s.Age);
Student std = new Student() { StudentName = "Bill", Age = };
PrintStudentDetail(std);//output: Name: Bill, Age: 21
Linq中的Func:
IList<Student> studentList = new List<Student>() {
new Student { Age=, StudentName="sealee" },
new Student { Age=, StudentName="sealee2" },
}; Func<Student, bool> isStudentTeenAger = s => s.Age > && s.Age < ;
var teenStudents = studentList.Where(isStudentTeenAger).ToList<Student>();
LINQ中的表达式
我们已经了解到lambda Expression可以分配给Func或Action类型委托来处理内存中的集合。.NET编译器在编译时将分配给Func或Action类型委托的lambda表达式转换为可执行代码。
LINQ引入了名为Expression的新类型,它表示强类型的lambda表达式。这意味着lambda表达式也可以分配给Expression <TDelegate>类型。.NET编译器将分配给Expression <TDelegate>的lambda表达式转换为表达式树而不是可执行代码。
//定义表达式
//Func 方法
// Func<Student, bool> isTeenAger = s => s.Age > 12 && s.Age < 20;
//使用Expresson包装Func委托将上述Func类型委托转换为表达式,如下所示:
Expression<Func<Student, bool>> isTeenAgerExpr = s => s.Age > && s.Age < ; //调用表达式
Func<Student, bool> isTeenAger = isTeenAgerExpr.Compile();
//Invoke
bool result = isTeenAger(new Student() { ID = , StudentName = "Steve", Age = });
使用:
//IEnumerable studentList
IList<Student> studentList = new List<Student>() {
new Student { Age=, StudentName="sealee" },
new Student { Age=, StudentName="sealee2" },
};
Func<Student, bool> isStudentTeenAger = s => s.Age > && s.Age < ;
//OutDto 是我们自己定义的返回类 实际情况一般针对我们的返回接口都会生成一个单独的Dto来返回
Expression<Func<Student, OutDto>> outDto =
s => new OutDto { AAgeDto = s.Age, StudentNameDto = s.StudentName };
var teenStudents = studentList.Where(isStudentTeenAger).AsQueryable().Select(outDto);
//AsQueryable 注意这里,select(Expression) 需要我们是IQueryable
//IEnumerable 使用的是 Func
//IQueryable 使用的是 Expression<Func
Linq 表达的更多相关文章
- c#LINQ表达树
如果你已经用过LINQ, 你应该知道函数方式,以及包含的丰富的类库, 如果你仍不了解, 那根据下面的链接去熟悉一下 the LINQ tutorial, lambda. 表达树提供了丰富的包含参数的 ...
- Linq表达树(固定参数)
这篇博客只能用来批判因为我刚刚学习linq对它了解只有简单的linq to sql 的语句所以来写这个博客只能说是班门弄斧了,看的下去的话就坚持看吧. 在网上看了别人的文章目前水平有限借鉴别人的思想吧 ...
- .Net 分布式云平台基础服务建设说明概要
1) 背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2) 基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3) 概要说明 基础服务的发展会根 ...
- .NET深入实战系列--EF到底怎么写过滤条件
本文唯一访问地址:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: ...
- MongoDB 分页查询的方法及性能
最近有点忙,本来有好多东西可以总结,Redis系列其实还应该有四.五.六...不过<Redis in Action>还没读完,等读完再来总结,不然太水,对不起读者. 自从上次Redis之后 ...
- .NET深入实战系列--EF到底怎么写过滤条件(转)
原文来自:http://www.cnblogs.com/yubaolee/p/DynamicLinq.html 对于系统开发来说,按不同字段进行过滤查询是一种常见的需求.在EF中通常的做法是: /// ...
- C#MongoDB 分页查询的方法及性能
传统的SQL分页 传统的sql分页,所有的方案几乎是绕不开row_number的,对于需要各种排序,复杂查询的场景,row_number就是杀手锏.另外,针对现在的web很流行的poll/push加载 ...
- Mego(03) - ORM框架的新选择
前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...
- asp.net core系列 33 EF查询数据 (2)
一. 原生SQL查询 接着上篇讲.通过 Entity Framework Core 可以在使用关系数据库时下降到原始 SQL 查询. 在无法使用 LINQ 表达要执行的查询时,或因使用 LINQ 查询 ...
随机推荐
- ZT 为什么Java中继承多数是有害的?
大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“Java设计模式”一书详细阐述了怎样用接口继承 ...
- jquery解析XML在IE7下不兼容的问题
jquery在解析XML内容的时候在IE7下无法显示,是因为数据格式的问题,解决办法如下: $.ajax({ type:"POST", url:&quo ...
- UOJ#288:基础数据结构练习题
题面 UOJ Sol 玄学,不会势能分析 所以 维护区间最大最小值 把开根变成区间减法 如果最大值开根后的变化量和最小值的相等,就直接打个减法\(lazy\) # include <bits/s ...
- sql left join 字符串
select * FROM table1 as t1 right join (select '1,2,3,4,5' as t) as tt on t1.Id=tt.t select * FROM t ...
- elentment-ui解析
序言 现在前端的技术越来越杂,也越来越细了,以至于每次看完文档都会有个错觉,就是自己差不多会了.真正去做项目的时候又是重复之前的步骤. 之前写Java的时候,会习惯性的看看源码,看完之后会对知识掌握的 ...
- XPath路径表达式笔记(转载)
简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点)- attribute(属性节点)- text ( ...
- [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上
这一部分,我准备向大家介绍Selenium WebDriver的常用API,学习这部分内容需要大家最好有一些简单的HTML相关知识,本文主要涉及到以下内容: Selenium API:元素检查 Sel ...
- Visual C++编程实现摄像头视频捕捉
原文:http://blog.csdn.net/nemojiang/article/details/653033?locationNum=7&fps=1 前言 DirectShow是微软公司提 ...
- Git学习-Git配置(一)
零.前言 Git是一个工具,就没必要把时间浪费在那些"高级"但几乎永远不会用到的命令上.一旦你真的非用不可了,到时候再自行Google或者请教专家也未迟. 如果你是一个开发人员,想 ...
- 数组多功能splice()方法的插入,删除,替换
多功能splice()插入.删除.替换 <script type="text/javascript"> var arr=['A','B','C','D','E','F' ...