//通过表达式构建的方式创建下面语句的效果,其中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}
虽然不是很明白这么做的意义 ,
但还是提供一个使用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;
}
还可以试下动态反射
我想要的返回类型是Expression<Func<T,object>>
用于SqlSugar WhereColumns(Expression<Func<T,object>> columns)参数
@yourebi: 那你参考一下我这个包装成Expression不就行了
只提供思维。