提问者:小点点

无法用列表<T>手动创建Lambda表达式树


我需要帮助手动创建这个lambda表达式。我无法正确创建MemberExpression来隔离基础列表的“breed”属性。在本例中,breeddog的属性。

这是我需要手动创建的lambda:

int maxlen = dogList.Select(d => d.Breed.Trim().Length).OrderByDescending(d1 => d1).First();

下面是我获取breed属性的尝试:

ParameterExpression dogParam = Expression.Parameter(typeof(List<Dog>), "dog");

MemberExpression dogMember = 
    Expression.Field(dogParam, dogMember.Type.GetGenericTypeDefinition().GetProperty("Breed"));

共1个答案

匿名用户

我不确定您的问题到底出在哪里,但它已经帮助您找到了最可能需要的API:

可以使用expression.lambda创建lambda表达式作为select的参数。在lambda表达式中,您需要expression.MakeMemberAccess来访问breed属性。您将需要反射方法(例如Type.GetMember)来获取相关的MemberInfo对象。