foreach循环中的C#Expression.PropertyOrField

时间:2018-03-23 10:22:45

标签: c# .net-core

我试图通过一个字符串数组来获取给定类的第一级属性的表达式,每个字符串都与属性名称相关,以获取表达式:

public List<MemberExpression> CreateMembers(string propertyPaths)
{
    List<MemberExpression> test = new List<MemberExpression>();



    var propertiesPath = propertyPaths.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (var propertyPath in propertiesPath)
    {
        var mainParameter = Expression.Parameter(typeof(Process), "e");
        var property = Expression.PropertyOrField(mainParameter, typeof(Process), propertyPath);
        test.Add(property);
        property = null;
        mainParameter = null;
    }

    return test;
}

我试图从这个类中获取公共虚拟属性:

public class Process

{

     public int? CompanyId { get; set; }

     public int? RecommendationId { get; set; }

     public int? DiagnosisNodeId { get; set; }

     [ForeignKey("DiagnosisId")]
     public virtual Diagnosis Diagnosis { get; set; }

     [ForeignKey("DiagnosisNodeId")]
     public virtual DiagnosisNode DiagnosisNode { get; set; }

     [ForeignKey("RecommendationId")]
     public virtual Recommendation Recommendation { get; set; }
}

但是在第一次迭代之后,Expression.Property总是抛出一个异常,即给定的属性不存在于Process类中。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

  

propertyPaths的一个示例是:"Diagnosis, DiagnosisNode"

问题是逗号后面的空格。没有名为" DiagnosisNode"的属性(带有前导空格)。在.Trim()返回的字符串上使用Split,或者首先不包含空格。