NET 构建动态Lambda表达式
1.定义lambda的参数,型如我们常写的“x=>”: using System.Linq.Expressions;
var type = typeof(CustClass); ParameterExpression parameter = Expression.Parameter(type, "x");
2.定义要使用lambda的属性成员(比如添加时间: Name)
MemberExpression member = Expression.PropertyOrField(parameter, "Name");
3.转换为Expression表达式 x => x.Name
dynamic exprelambda = Expression.Lambda(member, parameter);
4.转换为Expression表达式 x => x.Name.Constant("张三")
// 表达式左侧 x.Name var left = Expression.PropertyOrField(parameter, "Name"); // 表达式右侧 '张三' var right = Expression.Constant("张三"); // 表达式连接符 Equals var constant = Expression.Equal(left, right); // 转换成完整表达式: x => x.Name.Equals("张三") var exprelambda = Expression.Lambda<Func<CustClass, bool>>(constant, parameter);
5.将Expression表达式转换为Func委托,用于Where里面的参数
var lambda = exprelambda.Compile();
6.调用
var list = new List<CustClass>(); var sortList = list.OrderBy(x => lambda(x));
7.完整Demo

public class TestLambda : BaseTesting { public TestLambda(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } [Fact] public void Run() { var list = new List<CustClass>(); Enumerable.Range(0, 10).ToList().ForEach(x => list.Add(new CustClass { Code = x, Name = $"张三-{x}", })); var type = typeof(CustClass); // 1.定义lambda的参数,型如我们常写的“x=>”: using System.Linq.Expressions; ParameterExpression parameter = Expression.Parameter(type, "x"); { // 2.定义要使用lambda的属性成员(比如添加时间: Name) MemberExpression member = Expression.PropertyOrField(parameter, "Name"); // 3.转换为Expression表达式 x => x.Name dynamic exprelambda = Expression.Lambda(member, parameter); // 5.将Expression表达式转换为Func委托,用于Where里面的参数 var lambda = exprelambda.Compile(); // 6.调用 var sortList = list.OrderBy(x => lambda(x)); var sortDescList = list.OrderByDescending(x => lambda(x)); } { // 表达式左侧 x.Name var left = Expression.PropertyOrField(parameter, "Name"); // 表达式右侧 '张三' var right = Expression.Constant("张三-0"); // 表达式连接符 == var constant = Expression.Equal(left, right); // 3.转换成完整表达式: x => x.Name.Equals("张三") var exprelambda = Expression.Lambda<Func<CustClass, bool>>(constant, parameter); // 5.将Expression表达式转换为Func委托,用于Where里面的参数 var lambda = exprelambda.Compile(); // 6.调用 var whereList = list.Where(x => lambda(x)).ToList(); } } } public class CustClass { public int Code { get; set; } public string Name { get; set; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现