C# MVC LINQ动态orderBy获取列类型
我正在尝试动态订购产品列表C# MVC LINQ动态orderBy获取列类型,c#,asp.net-mvc,linq,dynamic-typing,C#,Asp.net Mvc,Linq,Dynamic Typing,我正在尝试动态订购产品列表 Product: price (int) name (string) 到目前为止,我已取得以下成果: string columnToOrderBy = "price"; ParameterExpression param = Expression.Parameter(typeof(Product), "p"); var ordering = Expression.Lambda<Func<Product, double>>(Expression
Product:
price (int)
name (string)
到目前为止,我已取得以下成果:
string columnToOrderBy = "price";
ParameterExpression param = Expression.Parameter(typeof(Product), "p");
var ordering = Expression.Lambda<Func<Product, double>>(Expression.Property(param, columnToOrderBy), param);
string columnToOrderBy=“price”;
ParameterExpression param=表达式参数(产品类型),“p”);
变量排序=Expression.Lambda(Expression.Property(param,columnToOrderBy),param);
这适用于按价格订购,但由于列类型的原因,按名称订购时不起作用
Expression.Lambda<Func<Product, double>>
Expression.Lambda
在Func方法中设置列的类型,还有其他方法吗?看看动态LINQ,Scott Gu在这里发表了一篇很好的文章 它让事情变得如此简单
query = query.OrderBy(columnName);
或
当您不需要手动操作表达式树时,就不需要再胡闹了。使用动态LINQ将使您的代码更易于理解和维护
编辑 您现在可以将其作为Nuget软件包安装,但它们似乎都不是来自官方来源(在撰写本文时) 下面是一个包含Scott Gu介绍的代码的示例 这是一个扩展到包含更多功能的。它似乎正在积极开发中,看起来很有趣
太好了,谢谢!我早些时候见过它,但决定不使用它。我不知道为什么现在!
//orderby descending
query = query.OrderBy(columnName + " DESC");