关于LINQ Lambda表达式n => n 如何用表达式树表示的解决方案

本文介绍了一种使用ParameterExpression来表示Lambda表达式num=>num的方法,并通过具体示例展示了如何构建表达式树并应用于排序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间在论坛发表了一个提问,

问题题目:“请教Lambda表达式num => num如何用ParameterExpression的方式表示?”

ref:http://topic.youkuaiyun.com/u/20100827/01/75fd7add-553d-4bfd-be95-94fed243757e.html

然而一直没有解决方案,当时研究了很久 也和一些朋友探讨过,但是一直没有结果。

今天下午闲的时候,偶然想到了这个问题,所以拿出来再次研究了一番。

最终,关已攻破!特分享出来。


源代码如下:


    class Program
    {
        static void Main(string[] args)
        {
            List<decimal> decimals = new List<decimal> { 6.2m, 8.3m, 0.5m, 1.3m, 6.3m, 9.7m };

            //创建表达式参数
            ParameterExpression param = Expression.Parameter(typeof(decimal), "n");
            ParameterExpression[] parameters = new ParameterExpression[] { param };
            //创建Lambda表达式主体
            //注意:由于排序函数传递的参数类型与返回的参数类型一致,并且都是单个值
            //所以Expression的方法将不适用(至少目前来说我没有找到有相应能处理的方法或者函数)
            //直接将表达式主体指向参数表达式即可。
            Expression body = param; //Expression.GreaterThan(number, zero);
            //构造表达式结构树
            Expression<Func<decimal, decimal>> orderby = Expression.Lambda<Func<decimal, decimal>>(body, param);

            //Expression<Func<decimal, decimal>> filter = n => n;
            //BinaryExpression lt = (BinaryExpression)filter.Body;

            //执行排序操作
            //参数orderby效果等同n=>n
            IEnumerable<decimal> query = decimals.AsQueryable().OrderByDescending(orderby);
            //打印输出排序结果
            query.ToList().ForEach(a => Console.Write(string.Format("{0}/n", a.ToString())));
            Console.ReadLine();
        }
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值