动态创建lambdas表达式+ linq + OrderByDescending
如何创建一个动态lambda表达式来传递给我在linq里面的orderby函数中使用?
我基本上想要转换queryResults.OrderByDescending();
在queryResults.OrderByDescending(myCustomGeneratedLambdaExp);
其中myCustomGeneratedLambdaExp
应为包含x => x.name
的字符串。
谢谢
我不确定你到底需要什么动态lambda表达式。 无论如何,动态生成lambda表达式的最佳方法是使用表达式树。 这是关于这个主题的两个很好的教程:
- http://marlongrech.wordpress.com/2008/01/08/working-with-expression-trees-part-1/
- http://www.davidhayden.com/blog/dave/archive/2006/12/18/ExpressionTrees.aspx [死链接]
此代码生成一个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( Expression.Convert(body, typeof(string)), targetParameter ); return lambda.Compile();
希望这可以帮助
请参见动态LINQ
或者,您可以在C#4中使用switch语句,Reflection或dynamic
类型,以根据提供的字段名称返回值。
这也是以前的死亡
- Convert.ToBoolean(“1”)在C#中抛出System.Formatexception
- Autofac运行时参数
- NHibernate和奇怪的“Session is Closed!”错误
- 设置DataGridView.DataSource后获取空行
- 在wpf mvvm中绑定时间跨度,并且仅显示分钟:秒?
- 在当前上下文中不存在名称’sr’
- 如何使用EDMX文件中的映射生成Entity Framework 6.x POCO类?
- 设置RadioButton的value属性
- 为什么Request.Form.ToString()的返回值与NameValueCollection.ToString()的结果不同