Lambda表达式 和 Expression<T>
经常用的Lambda表达式 返回的是 Expression<T> 格式
public class ActivityService
{
private readonly List<Activity> _source = new List<Activity>(); public ActivityService()
{
_source.Add(new Activity()
{
Id = "5656d551d430520e100fa4f5" ,
Name="奥运会"
});
_source.Add(new Activity()
{
Id = "d702abd8",
Name = "亚运会"
});
_source.Add(new Activity()
{
Id = "706b0ba267a9",
Name = "美洲杯"
}); _source.Add(new Activity()
{
Id = "47d6",
Name = "世界杯"
});
_source.Add(new Activity()
{
Id = "4a8d",
Name = "大运会"
});
_source.Add(new Activity()
{
Id = "acdb",
Name = "欧洲杯"
});
} public Activity GetOne(Expression<Func<Activity, bool>> where)
{
var func = where.Compile();
return _source.FirstOrDefault(o => func(o)); }
}
public class Activity
{
public string Id { get; set; }
public string Name { get; set; } }
调用方式如下:
class Program
{
static void Main(string[] args)
{
ActivityService service=new ActivityService();
string id = string.Empty;
string name = "大运会"; //表达式不支持语句块
Expression<Func<Activity, bool>> expression =
(Activity a) => string.IsNullOrEmpty(id) ? a.Name == name : a.Id == id; //如果需要语句块 可以直接使用委托,然后有2种方法 (1)将其封装到Excepression (2)直接使用Lambda表达式
Func<Activity, bool> func = (a) =>
{
if (!string.IsNullOrEmpty(id))
return a.Id == id;
return a.Name == name;
};
//expression = (Activity a) => func(a);
//或者直接在下面使用Lambda
var activity2 = service.GetOne( (a)=>func(a)); var activity = service.GetOne(expression);
Console.Read();
}
}
Lambda表达式 和 Expression<T>的更多相关文章
- 委托、匿名委托、Lambda 表达式、Expression表达式树之刨根问底
本篇不是对标题所述之概念的入门文章,重点在阐述它们的异同点和应用场景.各位看官,这里就不啰嗦了,直接上代码. 首先定义一个泛型委托类型,如下: public delegate T Function&l ...
- C#中Lambda表达式类型Expression不接受lambda函数
在EF Core中我们经常会用System.Linq.Expressions系统命名空间的Expression<TDelegate>类型来作为EF Core的查询条件,比如: using ...
- 深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...
- [C#] C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- Util应用程序框架公共操作类(七):Lambda表达式公共操作类
前一篇扩展了两个常用验证方法,本文将封装两个Lambda表达式操作,用来为下一篇的查询扩展服务. Lambda表达式是一种简洁的匿名函数语法,可以用它将方法作为委托参数传递.在Linq中,大量使用La ...
- C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- 动态LINQ(Lambda表达式)构建
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- 匿名函数 lambda表达式(lambda expression)
阅读g2log时,发现有两行代码居然看不懂. 1. auto bg_call = [this, log_directory]() {return pimpl_->backgroundChang ...
- 基类的参考Expression能传一个lambda表达式
using System;using System.Collections.Generic;using System.Data.Entity.Infrastructure;using System.L ...
随机推荐
- Sublime Text 必备插件
收集网址:http://segmentfault.com/a/1190000002748032
- Android几种打开SQLite的方法
第一种:用SQLiteOpenHelper辅助类 SQLiteOpenHelper类可以用来创建或打开数据库,两个关键的方法:onCreate(SQLiteDatabase db)和onUpgrade ...
- 访问HTML元素(节点)
访问HTML元素等同于访问节点,能够以不同的 方式来访问HTML元素: 通过使用 getElementById() 方法 通过使用 getElementsByTagName() 方法 通过使用 get ...
- linux基础-第十三单元 硬盘分区、格式化及文件系统的管理二
第十三单元 硬盘分区.格式化及文件系统的管理二 文件系统的挂载与卸载 什么是挂载 mount命令的功能 mount命令的用法举例 umount命令的功能 umount命令的用法举例 利用/etc/fs ...
- Day Five (beta)
站立式会议 站立式会议内容总结 331 今天:爬虫抓取豆瓣数据; 明天:数据展示在话题详情页,话题页修改 442 今天:了解聊天模块 遇到的问题:无 明天:编写聊天模块 439 今天:学习 遇到困难 ...
- Android性能优化文章转载
今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...
- [转]javascript Date format(js日期格式化)
方法一:这个很不错,好像是 csdn 的 Meizz 写的: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) ...
- 函数也是对象,本片介绍函数的属性、方法、Function()狗仔函数。
1.arguments.length表示实参的个数. 2.arguments.callee.length表示形参个数. function test(a,b,c,d,e,f){ alert(argume ...
- 在编译php事务时候出现如下错误,具体原因不知,不过解决了
在make的时候出现如下错误 libtool: link: `ext/date/lib/parse_date.lo' is not a valid libtool objectmake: *** [l ...
- java-URLConnection网络数据收取
通过url创建connection方式收取 import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import ja ...