如何创建一个动态lambda表达式来传递在linq中的orderby函数中使用?动态创建lambdas表达式+ linq + OrderByDescending
我基本上想变换queryResults.OrderByDescending();
在queryResults.OrderByDescending(myCustomGeneratedLambdaExp);
其中myCustomGeneratedLambdaExp
应该是包含x => x.name
的字符串。
感谢
如何创建一个动态lambda表达式来传递在linq中的orderby函数中使用?动态创建lambdas表达式+ linq + OrderByDescending
我基本上想变换queryResults.OrderByDescending();
在queryResults.OrderByDescending(myCustomGeneratedLambdaExp);
其中myCustomGeneratedLambdaExp
应该是包含x => x.name
的字符串。
感谢
我不知道确切的地方,你需要动态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-03 16:02:05
是的,有道理。祝你好运。使用动态和/或Iron *比动态LINQ或reflection.emit或Expression.Compile更干净,尽管如果你想保持你的代码可维护和清洁IMO。 – 2009-11-03 17:25:22
再次感谢您的宝贵意见。 – 2009-11-04 12:20:40
感谢您的好例子!这对我帮助很大! – 2009-11-03 16:02:36
请注意,第一个链接已死亡 – 2017-05-19 20:53:13