动态创建lambdas表达式+ linq + OrderByDescending

时间:2009-11-03 14:51:24

标签: c# linq lambda dynamic-linq

如何创建动态lambda表达式以传递给linq中的orderby函数使用?

我基本上希望在queryResults.OrderByDescending();中变换queryResults.OrderByDescending(myCustomGeneratedLambdaExp);,其中myCustomGeneratedLambdaExp应为包含x => x.name的字符串。

由于

2 个答案:

答案 0 :(得分:4)

我不确定你到底需要什么动态lambda表达式。无论如何,动态生成lambda表达式的最佳方法是使用表达式树。以下是关于该主题的两个很好的教程:

此代码生成一个lambda表达式,就像您要求的那样(“x => x.name”):

MemberInfo member = typeof(AClassWithANameProperty).GetProperty("Name");

//Create 'x' parameter expression
ParameterExpression xParameter = Expression.Parameter(typeof(object), "x");

//Create body expression
Expression body = Expression.MakeMemberAccess(targetParameter, member);

//Create and compile lambda
var lambda = Expression.Lambda<LateBoundGetMemberValue>(
    Expression.Convert(body, typeof(string)),
    targetParameter
);
return lambda.Compile();

希望这会有所帮助

答案 1 :(得分:2)

请参阅Dynamic LINQ

或者,您可以使用switch语句,Reflection或C#4中的dynamic类型,根据提供的字段名称返回值。

这也是对死亡进行的previously