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介绍的代码的示例

这是一个扩展到包含更多功能的。它似乎正在积极开发中,看起来很有趣

  • PM>安装包System.Linq.Dynamic

  • query=query.OrderBy(columnName)


  • 太好了,谢谢!我早些时候见过它,但决定不使用它。我不知道为什么现在!
    //orderby descending
    query = query.OrderBy(columnName + " DESC");