相关疑难解决方法(0)

从string构造用于嵌套属性的LambdaExpression

我试图从属性的名称在运行时为嵌套属性创建一个lambda表达式.基本上我正在尝试创建由以下指定的lambda表达式:

var expression = CreateExpression<Foo, object>(foo => foo.myBar.name);

private static Expression CreateExpression<TEntity, TReturn>(Expression<Func<TEntity, TReturn>> expression)
{
    return (expression as Expression);
}
Run Code Online (Sandbox Code Playgroud)

随着课程:

class Foo
{
    public Bar myBar { get; set; }
}
class Bar
{
    public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的只是Foo字符串的类型"myBar.name"

如果它是一个普通的属性,例如只需要该值,"myBar"那么我可以使用以下内容:

private static LambdaExpression GetPropertyAccessLambda(Type type, string propertyName)
{
    ParameterExpression odataItParameter = Expression.Parameter(type, "$it");
    MemberExpression propertyAccess = Expression.Property(odataItParameter, propertyName);
    return Expression.Lambda(propertyAccess, odataItParameter);
}
Run Code Online (Sandbox Code Playgroud)

但是,此代码不适用于嵌套属性,我不知道如何创建LambdaExpression来完成工作foo.myBar.name.

我认为这将是这样的:

GetExpression(Expression.Call(GetExpression(Foo, "myBar"), "name")) …
Run Code Online (Sandbox Code Playgroud)

.net c# linq lambda expression-trees

35
推荐指数
1
解决办法
1万
查看次数

表达式<Func <TModel,string >>到Expression <Action <TModel >>"Getter"到"Setter"

我是表达式的新手,我想知道如何以任何方式转换我的表达式

让我们说在这个例子中我的TModel是Customer类型,并将它分配给这样的地方:

Expression<Func<TModel, string>> getvalueexpression = customer =>customer.Name
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

Expression<Action<TModel,string>> setvalueexpression = [PSEUDOCODE] getvalueexpression = input
Action<TModel,string> Setter  = setvalueexpression.Compile();
Setter(mycustomer,value);
Run Code Online (Sandbox Code Playgroud)

所以简而言之,我想以某种方式构建和编译一个表达式,该表达式将我的getter表达式指定的客户名称设置为特定值.

c# lambda expression

9
推荐指数
1
解决办法
3370
查看次数

标签 统计

c# ×2

lambda ×2

.net ×1

expression ×1

expression-trees ×1

linq ×1