Heim > Backend-Entwicklung > C++ > Wie kann ich OrderBy von IQueryable mit generischen Spaltennamen erweitern?

Wie kann ich OrderBy von IQueryable mit generischen Spaltennamen erweitern?

Linda Hamilton
Freigeben: 2025-01-14 09:40:44
Original
731 Leute haben es durchsucht

How Can I Extend IQueryable's OrderBy with Generic Column Names?

Erweitern Sie die OrderBy-Methode von IQueryable mit generischen Spaltennamen

In diesem Artikel wird untersucht, wie man IQueryable mit einer generischen Erweiterungsmethode erweitert, sodass es basierend auf einem bestimmten String-Spaltennamen sortiert werden kann.

Erwägen Sie die folgenden Erweiterungsmethoden:

<code class="language-csharp">public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)
    where T : EntityObject</code>
Nach dem Login kopieren

Um die Sortierfunktion zu implementieren, müssen wir einen Ausdruck unter Verwendung des angegebenen Spaltennamens erstellen. Wir sind jedoch auf ein Problem gestoßen: Der aus dem Ausdruck abgeleitete Sortiertyp stimmte nicht mit dem für die OrderBy-Methode erforderlichen Typ überein.

Dies stellt eine Herausforderung dar, da der Sortiertyp TSortColumn nur zur Laufzeit bestimmt werden kann. Es gibt jedoch eine Lösung.

Das bereitgestellte Codebeispiel zeigt einen ähnlichen Ansatz:

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)</code>
Nach dem Login kopieren

Diese Methode akzeptiert einen Zeichenfolgenparameter ordering, der den Spaltennamen darstellt. Es generiert dynamisch einen Ausdruck basierend auf dem angegebenen Spaltennamen und dem Lambda-Ausdruck. Der resultierende Ausdruck wird dann verwendet, um ein MethodCallExpression zu erstellen, das die OrderBy-Methode aufruft.

Abschließend wird source.Provider.CreateQuery<T> aufgerufen, um das sortierte IQueryable zurückzugeben.

Änderung: Für absteigende Sortierung:

<code class="language-csharp">MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich OrderBy von IQueryable mit generischen Spaltennamen erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage