Heim >Backend-Entwicklung >C++ >Wie ordne ich LINQ-Ergebnisse dynamisch mit OrderBy an?

Wie ordne ich LINQ-Ergebnisse dynamisch mit OrderBy an?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-10 11:47:42165Durchsuche

How to Dynamically Order LINQ Results Using OrderBy?

Verwenden Sie OrderBy, um LINQ-Ergebnisse dynamisch zu sortieren

Frage:

Wie kann ich die an die OrderBy-Methode übergebenen Parameter basierend auf den Parametern dynamisch angeben?

Details:

Angenommen, Sie haben eine Liste mit Schülern und möchten diese nach einem bestimmten Attribut sortieren. Die aktuelle Implementierung verwendet hartcodierte Eigenschaftsnamen, aber wie übergebe ich Eigenschaftsnamen als Parameter?

Beispiel:

<code class="language-C#">string param = "City";
List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();</code>

Lösung:

Die Lösung besteht darin, Ausdrucksbäume mithilfe von Reflektion dynamisch zu erstellen. Eine Erweiterungsmethode kann wie folgt erstellt werden:

<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>
Der Parameter

orderByProperty stellt den Attributnamen dar und desc bestimmt die Sortierreihenfolge.

Verwendung:

Sie können Ihre Studentenliste jetzt dynamisch sortieren:

<code class="language-C#">existingStudents.OrderBy("City", true); // 按城市降序排序
existingStudents.OrderBy("City", false); // 按城市升序排序</code>

Das obige ist der detaillierte Inhalt vonWie ordne ich LINQ-Ergebnisse dynamisch mit OrderBy an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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