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

Dynamic LINQ を見てみましょう。Scott Gu がここにすばらしい投稿をしました。動的クエリ ライブラリ.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> インストール パッケージ System.Linq.Dynamic

  2. クエリ = query.OrderBy(列名);

于 2013-12-02T05:00:33.423 に答える