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

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

Susan Sarandon
リリース: 2025-01-10 12:35:42
オリジナル
308 人が閲覧しました

How Can I Dynamically Specify the OrderBy Property in LINQ?

LINQ OrderBy パラメーターを動的に指定する

C# では、LINQ の OrderBy メソッドを使用して、指定されたプロパティまたは式に基づいてデータを並べ替えることができます。しかし、並べ替えの基準となるプロパティまたは式を動的に指定するにはどうすればよいでしょうか?

質問:

パラメータを指定して、指定された属性に基づいて学生のリストを並べ替えたいと考えていますが、現在、OrderBy 呼び出しの属性名はハードコードされています。

例:

<code class="language-csharp">List<Student> existingStudents = new List<Student> { new Student { ... }, new Student { ... } };
List<Student> orderByAddress = existingStudents.OrderBy(c => c.Address).ToList();</code>
ログイン後にコピー

ターゲット:

OrderBy で静的なプロパティ名を使用するのではなく、プロパティ名をパラメータとして取得したいと考えています。

例:

<code class="language-csharp">string param = "City";
List<Student> orderByCity = existingStudents.OrderBy(c => c.City).ToList(); //仍然需要明确指定属性</code>
ログイン後にコピー

解決策:

リフレクションを使用すると、OrderBy 式を動的に構築できます。

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc)
{
    // ...  (反射代码构建表达式树) ...
    return source.Provider.CreateQuery<T>(resultExpression);
}</code>
ログイン後にコピー

指定した属性によって動的に並べ替えることができます:

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

(注: 完全なリフレクション コードの実装はより複雑なので、ここでは省略します。式ツリーを構築し、存在しない属性などの考えられる例外を処理するには、System.Linq.Expressions 名前空間を使用する必要があります。) このソリューションは、動的ソートのアイデアを提供します。完全な実装には、実際の状況に応じてより堅牢なコードを記述する必要があります。 c => param を直接使用するのは間違いです。これは、学生オブジェクトのプロパティではなく、パラメータ文字列自体を並べ替えるだけです。 プロパティを動的に取得し、正しい式ツリーを構築するには、リフレクションを使用する必要があります。

以上がLINQ で OrderBy プロパティを動的に指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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