2

我正在尝试动态订购产品列表。

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 方法中设置它吗?

4

2 回答 2

5

看看动态 LINQ,Scott Gu 在这里做了一篇很棒的文章http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-动态查询库.aspx

它使它变得如此简单

query = query.OrderBy(columnName);

或者

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

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


编辑

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

这是一个香草包,其中包含 Scott Gu 提供的代码。

这是Scott 代码的一个分支,它已被扩展以包含更多功能。它似乎正在积极开发中,看起来很有趣。

于 2012-09-08T15:07:16.377 回答
0
  1. PM> Install-Package System.Linq.Dynamic

  2. query = query.OrderBy(columnName);

于 2013-12-02T05:00:33.423 回答