Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq查询-使用字符串作为属性?_C#_Linq - Fatal编程技术网

C# Linq查询-使用字符串作为属性?

C# Linq查询-使用字符串作为属性?,c#,linq,C#,Linq,代码: 我想添加指定了某些CustomAttribute数据注释的列 如何使用prop.Name(属性名称)作为属性而不是手动p.Name 例如 foreach (PropertyInfo prop in typeof(SomeObject).GetProperties()) { if (Attribute.IsDefined(prop, typeof(SomeCustomAttribute)))

代码:

我想添加指定了某些CustomAttribute数据注释的列

如何使用prop.Name(属性名称)作为属性而不是手动p.Name

例如

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 });