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>
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!