码迷,mamicode.com
首页 > Windows程序 > 详细

c# 动态构造实体属性的lambda Expression表达式

时间:2020-05-19 18:13:47      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:lam   bsp   length   exp   rop   public   int   fun   为什么   

 

获取实体T的所有属性的lambda表达式数组:

如x->x.a,x->x.b,x->x.b,x->x.c

public static Expression<Func<T, object>>[] GetExpressions<T>()
        {
            var properties = typeof(T).GetProperties();
            Expression<Func<T, object>>[] expressions = new Expression<Func<T, object>>[properties.Length];
            var p = Expression.Parameter(typeof(T), "x");
            for (int i = 0; i < properties.Length; i++)
            {
                Expression exProperty = Expression.Property(p, properties[i]);
                var body = Expression.Convert(exProperty, typeof(object));

                expressions[i] = Expression.Lambda<Func<T, object>>(body, p);
            }
            return expressions;
        }

 为什么要加var body = Expression.Convert(exProperty, typeof(object));

因为如果我们的属性的类型为decimal?等可空类型时,不加convert会报错。

c# 动态构造实体属性的lambda Expression表达式

标签:lam   bsp   length   exp   rop   public   int   fun   为什么   

原文地址:https://www.cnblogs.com/hankuikui/p/12918247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!