ホームページ > バックエンド開発 > C++ > OrderBy を使用して LINQ 結果を動的に並べ替える方法

OrderBy を使用して LINQ 結果を動的に並べ替える方法

Mary-Kate Olsen
リリース: 2025-01-10 11:47:42
オリジナル
164 人が閲覧しました

How to Dynamically Order LINQ Results Using OrderBy?

OrderBy を使用して LINQ 結果を動的に並べ替えます

質問:

パラメータに基づいて OrderBy メソッドに渡されるパラメータを動的に指定するにはどうすればよいですか?

詳細:

学生のリストがあり、特定の属性で並べ替えたいとします。現在の実装ではハードコーディングされたプロパティ名が使用されていますが、プロパティ名をパラメータとして渡すにはどうすればよいですか?

例:

<code class="language-C#">string param = "City";
List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();</code>
ログイン後にコピー

解決策:

この解決策には、リフレクションを使用して式ツリーを動的に構築することが含まれます。拡張メソッドは次のように作成できます:

<code class="language-C#">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 パラメーターは属性名を表し、desc は並べ替え順序を決定します。

使用法:

学生リストを動的に並べ替えることができるようになりました:

<code class="language-C#">existingStudents.OrderBy("City", true); // 按城市降序排序
existingStudents.OrderBy("City", false); // 按城市升序排序</code>
ログイン後にコピー

以上がOrderBy を使用して LINQ 結果を動的に並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート