MVC LINQ动态命令获取列类型

时间:2012-09-08 15:03:49

标签: 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.Property(param, columnToOrderBy), param);

这适用于按价格排序,但由于列类型,按名称排序时无效。

Expression.Lambda<Func<Product, double>>

无论如何都要获取列的类型以在Func方法中设置它吗?

2 个答案:

答案 0 :(得分:5)

看看动态LINQ,Scott Gu在这里发表了一篇很棒的帖子http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

它让它变得如此简单

query = query.OrderBy(columnName);

//orderby descending
query = query.OrderBy(columnName + " DESC");

当你不必要时,不需要手动操作表达树。使用动态LINQ将使您的代码更易于理解和维护。


修改

您现在可以将其安装为Nuget包,但它们似乎都不是来自官方来源(在撰写本文时)。

这里有一个vanilla package,其中包含Scott Gu所提供的代码。

此处的branch of Scott's code已扩展为包含更多功能。它似乎正在积极发展,看起来很有趣。

答案 1 :(得分:0)

  1. PM&GT; Install-Package System.Linq.Dynamic

  2. query = query.OrderBy(columnName);