MVC LINQ动态命令获取列类型

kiw*_*jus 2 c# linq asp.net-mvc dynamic-typing

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

Product:
price (int)
name (string)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已成功获得以下内容:

string columnToOrderBy = "price";
ParameterExpression param = Expression.Parameter(typeof(Product), "p");
var ordering = Expression.Lambda<Func<Product, double>>(Expression.Property(param, columnToOrderBy), param);
Run Code Online (Sandbox Code Playgroud)

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

Expression.Lambda<Func<Product, double>>
Run Code Online (Sandbox Code Playgroud)

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

Rei*_*ica 5

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

这让它变得如此简单

query = query.OrderBy(columnName);
Run Code Online (Sandbox Code Playgroud)

要么

//orderby descending
query = query.OrderBy(columnName + " DESC");
Run Code Online (Sandbox Code Playgroud)

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


编辑

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

这是一个包含Scott Gu提供的代码的vanilla软件包.

是Scott代码的一个分支,已经扩展到包含更多功能.它似乎正在积极发展,看起来很有趣.