ホームページ >バックエンド開発 >C++ >LINQ OrderBy 句で Sort プロパティを動的に指定するにはどうすればよいですか?

LINQ OrderBy 句で Sort プロパティを動的に指定するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 11:53:43641ブラウズ

How Can I Dynamically Specify the Sort Property in a LINQ OrderBy Clause?

動的パラメーターを使用して 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。