OrderBy
エンティティの列名を文字列として入力するラムダ式を使用してLINQ句を生成しようとしています(以下の「sortOn」変数内)。
以下のコードは、ラムダを生成する「コード」のような sortOn 値に対して正常に機能します
p => p.Code
しかし、ラムダが存在する可能性のある子エンティティもソートしたいと思います
p => p.Category.Description
したがって、この例では、sortOn = "Category.Description" を設定して、正しいラムバ式を生成したいと思います。
これは可能ですか?これを行うための最良の方法についての提案は歓迎されます。
このコードは、単純なケースでは問題なく機能します。
var param = Expression.Parameter(typeof (Product), "p");
var sortExpression = Expression.Lambda<Func<Product, object>>(
Expression.Property(param, sortOn), param);
if (sortAscending ?? true)
{
products = products.OrderBy(sortExpression);
}
else
{
products = products.OrderByDescending(sortExpression);
}
この問題の使用例は、データのグリッドを表示し、並べ替える列名をサーバーに戻すだけでデータを並べ替えることができることです。ソリューションを一般的なものにしたいのですが、今のところ特定のタイプ (例では Product) の使用を開始しています。