为给定的属性名称创建Linq表达式 >

问题描述 投票:0回答:1

如何通过导航为以下属性创建正确的Linq表达式:m.Model.Property1?为了解决这个问题,我已经努力了几天。但是我发现任何对我有用的答案。

我有这样的模型:

public class ViewModel
{
   public object Model { get; set; } //=Model is acutally the EntityModel
}
public class EntityModel
{
  public string Property1
}

我现在有类似的东西,但是找不到Property1。对于下面的最后2行,我找不到合适的解决方案,因此可以将其发送到HtmlHelper

var parameter = Expression.Parameter(typeof(ViewModel), "m"); //=ViewModel

var baseType = Html.ViewData.Model.GetType(); //=typeof(ViewModel)
var navExpr = Expression.Convert(Expression.Property(parameter, "Model"), typeof(EntityModel));

var exprProp = Expression.Property(navExpr , "Property1"); //This should create {m.Model.Property1}
var navExpr2 = Expression.Convert(exprProp, typeof(object));

return Expression.Lambda<Func<EditViewModel, object>>(navExpr2, parameter);

有帮助解决此问题的方法吗?

.net linq expression core
1个回答
0
投票

您需要将对象转换为EntityModel。这可以通过Expression.Convert来实现。尝试将您的navExpr更改为此:

var navExpr = Expression.Convert(Expression.Property(parameter, "Model"), typeof(EntityModel));

P.S。

同样在您的代码示例中,Property1实际上是一个字段,而不是属性(如果是,则可以使用Expression.PropertyOrFieldExpression.Field。]

© www.soinside.com 2019 - 2024. All rights reserved.