2

如何创建一个动态 lambda 表达式以在 linq 中的 orderby 函数中使用?

我基本上想要转换where应该是一个queryResults.OrderByDescending();包含.queryResults.OrderByDescending(myCustomGeneratedLambdaExp);myCustomGeneratedLambdaExpx => x.name

谢谢

4

2 回答 2

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();

希望这可以帮助

于 2009-11-03T15:12:10.627 回答
2

请参阅动态 LINQ

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

以前也这样做过死

于 2009-11-03T14:52:51.110 回答