C# Linq查询-使用字符串作为属性?
代码: 我想添加指定了某些CustomAttribute数据注释的列 如何使用prop.Name(属性名称)作为属性而不是手动p.Name 例如C# Linq查询-使用字符串作为属性?,c#,linq,C#,Linq,代码: 我想添加指定了某些CustomAttribute数据注释的列 如何使用prop.Name(属性名称)作为属性而不是手动p.Name 例如 foreach (PropertyInfo prop in typeof(SomeObject).GetProperties()) { if (Attribute.IsDefined(prop, typeof(SomeCustomAttribute)))
foreach (PropertyInfo prop in typeof(SomeObject).GetProperties())
{
if (Attribute.IsDefined(prop, typeof(SomeCustomAttribute)))
{
column.Expression(p => p.Name);
}
}
列。表达式为
...
column.Expression(p => prop.Name);
...
ITableColumn表达式(表达式)
假设您定义了以下类型:
ITableColumn Expression<TProperty>(Expression<Func<TModel, TProperty>> expression)
只要您静态地不知道t属性
,就不需要构建强类型lambda(Expression
)。
现在,让我们调用它:
private static LambdaExpression MakeMemberExpression(PropertyInfo propertyInfo)
{
var instanceExpression = Expression.Parameter(propertyInfo.DeclaringType);
return Expression.Lambda(Expression.MakeMemberAccess(instanceExpression, propertyInfo), instanceExpression);
}
var property=typeof(SomeObject)
.GetProperty(“我的财产”);
var columnType=typeof(列)
.MakeGenericType(typeof(SomeObject));
var expressionMethod=columnType
.GetMethod(“表达式”)
.MakeGenericMethod(property.PropertyType);
var expr=MakeMemberExpression(属性);
Invoke(new Column(),new[]{expr});
希望这能有所帮助。您想知道房产的价值吗?所以如果prop.Name==“Foo”,你想要p.Foo?是的,没错。如何做到这一点?动态LINQ@Xatep,请发布
column.Expression
definition.@Dennis ITableColumn Expression(Expression Expression)非常感谢!我一整天都在想办法让它发挥作用。谢谢!:)
private static LambdaExpression MakeMemberExpression(PropertyInfo propertyInfo)
{
var instanceExpression = Expression.Parameter(propertyInfo.DeclaringType);
return Expression.Lambda(Expression.MakeMemberAccess(instanceExpression, propertyInfo), instanceExpression);
}
var property = typeof(SomeObject)
.GetProperty("MyProperty");
var columnType = typeof(Column<>)
.MakeGenericType(typeof(SomeObject));
var expressionMethod = columnType
.GetMethod("Expression")
.MakeGenericMethod(property.PropertyType);
var expr = MakeMemberExpression(property);
expressionMethod.Invoke(new Column<SomeObject>(), new[] { expr });