参考:

http://blog.csdn.net/tastelife/article/details/7340205

http://blog.csdn.net/sweety820/article/details/39203087

源码:

private static Expression<Func<TSource, TResult>> CreateSelecter<TSource, TResult>(Dictionary<string,string> fieldDic)
        {
            Expression<Func<TSource, TResult>> selector = null;

            //(rec)
            ParameterExpression param = Expression.Parameter(typeof(TSource), "x");
            //new ParadigmSearchListData 
            var v0 = Expression.New(typeof(TResult));
            //Number
            List<MemberBinding> bindingList = new List<MemberBinding>();
            foreach (var item in fieldDic)
            {
                var p = typeof(TResult).GetProperty(item.Key);
                Expression right = GetProperty<TSource>(null, item.Value, param);
                //right= Expression.Constant(right, p.PropertyType);
                var v = Expression.Convert(GetProperty<TSource>(null, item.Value, param), p.PropertyType);
                var m = Expression.Bind(p, v);
                bindingList.Add(m);
            }
            Expression body = Expression.MemberInit(v0, bindingList);

          selector = (Expression<Func<TSource, TResult>>)Expression.Lambda(body, param);

            return selector;
        }

        public static Expression GetProperty<T>(Expression source, string Name, ParameterExpression Param)
        {
            Name = Name.Replace(")", "");
            string[] propertys = null;
            if (Name.Contains("=>"))
            {
                propertys = Name.Split('.').Skip(1).ToArray();
            }
            else
            {
                propertys = Name.Split('.');
            }
            if (source == null)
            {
                source = Expression.Property(Param, typeof(T).GetProperty(propertys.First()));
            }
            else
            {
                source = Expression.Property(source, propertys.First());
            }
            foreach (var item in propertys.Skip(1))
            {
                source = GetProperty<T>(source, item, Param);
            }
            return source;
        }

最新文章

  1. 【重装系统】线上Linux服务器(2TB)分区参考方案
  2. 帝国时代II 高清版 steam 4.4 字体替换 微软雅黑
  3. zw版【转发&#183;台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换
  4. Swift 动画学习笔记
  5. css写宽为30%的正方形
  6. sed 变量替换 把m.txt文件中的$i替换成$j
  7. 电脑cmos是什么?和bois的区别?
  8. POJ 3548 Restoring the digits
  9. 开发检测MySQL主从同步插件
  10. Windows Python requests 详细模块安装方法
  11. BoltDB简单使用教程
  12. 安装PyCharm
  13. python设计模式第十天【观察者模式】
  14. MATLAB——读取xls文件内容
  15. Debian ifconfig 命令找不到
  16. 卡方分布 | t检验 | F检验 | 卡方检验 | 假设检验 | 各种检验持续总结
  17. 2018.3.15 css课外小知识
  18. VS2017 IIS 部署.net core web项目
  19. 新的旅程:NodeJS - 环境篇
  20. *** error 65: access violation at C:0x001B : no &#39;execute/read&#39; permission

热门文章

  1. 嵌入式linux启动过程详解
  2. Groovy正则表达式复杂逻辑判断实例
  3. MyBatis学习02(配置解析)
  4. 教你IO流来便利电脑磁盘所有文件,把图片放到一个文件夹里(会发现什么不可告人的密码)
  5. WPF 中的DataTemplate 的嵌套
  6. MySQL临时表与内存表
  7. 【C#】 堆和栈
  8. Android中Context解析
  9. Blazor+Dapr+K8s微服务之事件发布订阅
  10. go defer关键字使用规则