我试图通过一个字符串数组来获取给定类的第一级属性的表达式,每个字符串都与属性名称相关,以获取表达式:
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类中。
有人可以帮我这个吗?
答案 0 :(得分:2)
propertyPaths的一个示例是:
"Diagnosis, DiagnosisNode"
问题是逗号后面的空格。没有名为" DiagnosisNode"
的属性(带有前导空格)。在.Trim()
返回的字符串上使用Split
,或者首先不包含空格。