首页 新闻 会员 周边

从泛型类创建匿名类型表达式

0
悬赏园豆:20 [待解决问题]
//通过表达式构建的方式创建下面语句的效果,其中prop1,prop2是动态的
Expression<Func<T,object>> exp=(x)=>new {x.prop1,x.prop2};


public Expression<Func<T,object>> Build<T>(string[] props){
    //TODO
    //????
}

class Person{
    public string Name{get;set;}
    public int Age{get;set;}
    public string Salary{get;set;}
}

Build<Person>(new string[]{"Name","Age"});//return x=>new {x.Name,x.Age}
yourebi的主页 yourebi | 初学一级 | 园豆:184
提问于:2018-10-24 23:34
< >
分享
所有回答(1)
0

虽然不是很明白这么做的意义 ,
但还是提供一个使用dynamic的解决方案:

 public static dynamic Build<T>(T instance, string[] properties)
{

  dynamic obj = new System.Dynamic.ExpandoObject();

  var type = typeof(T);

  foreach (var prop in properties)
  {
    var propertyInfo = type.GetProperty(prop);

    if (propertyInfo != null)
    {
      ((IDictionary<string, object>)obj).Add(propertyInfo.Name, propertyInfo.GetValue(instance));
    }

  }

  return obj;

}

还可以试下动态反射

前行丶 | 园豆:219 (菜鸟二级) | 2019-03-04 16:19

我想要的返回类型是Expression<Func<T,object>>
用于SqlSugar WhereColumns(Expression<Func<T,object>> columns)参数

支持(0) 反对(0) yourebi | 园豆:184 (初学一级) | 2019-03-04 16:57

@yourebi: 那你参考一下我这个包装成Expression不就行了
只提供思维。

支持(0) 反对(0) 前行丶 | 园豆:219 (菜鸟二级) | 2019-03-05 16:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册