動的パラメーターを使用して LINQ の OrderBy 式をカスタマイズします
LINQ の OrderBy 拡張メソッドを使用すると、1 つ以上のプロパティに基づいてオブジェクトのコレクションを並べ替えることができます。しかし、パラメーターとして渡された値を使用して並べ替えるプロパティをどのように指定するのでしょうか?
背景:
次のコードは、プロパティがハードコーディングされている OrderBy の基本的な使用法を示しています。
<code class="language-csharp">List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}}; List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();</code>
動的属性指定:
並べ替えるプロパティを動的に指定するには、リフレクションを利用して必要な式ツリーを構築します。この機能を実装する拡張メソッドは次のとおりです:
<code class="language-csharp">public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty, bool desc) { string command = desc ? "OrderByDescending" : "OrderBy"; var type = typeof(TEntity); var property = type.GetProperty(orderByProperty); var parameter = Expression.Parameter(type, "p"); var propertyAccess = Expression.MakeMemberAccess(parameter, property); var orderByExpression = Expression.Lambda(propertyAccess, parameter); var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExpression)); return source.Provider.CreateQuery<TEntity>(resultExpression); }</code>
は並べ替えるプロパティの名前で、orderByProperty
は降順 (true) または昇順 (false) のどちらで並べ替えるかを決定します。 desc
使用法:
この拡張メソッドを使用すると、任意の属性で動的に並べ替えることができるようになります:
以上がLINQ OrderBy 句で Sort プロパティを動的に指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。