Heim > Backend-Entwicklung > C++ > Wie kann ich die Sort-Eigenschaft in einer LINQ-OrderBy-Klausel dynamisch angeben?

Wie kann ich die Sort-Eigenschaft in einer LINQ-OrderBy-Klausel dynamisch angeben?

Barbara Streisand
Freigeben: 2025-01-10 11:53:43
Original
599 Leute haben es durchsucht

How Can I Dynamically Specify the Sort Property in a LINQ OrderBy Clause?

Verwenden Sie dynamische Parameter, um OrderBy-Ausdrücke in LINQ anzupassen

Mit der OrderBy-Erweiterungsmethode von LINQ können Sie eine Sammlung von Objekten basierend auf einer oder mehreren Eigenschaften sortieren. Aber wie legen Sie anhand der als Parameter übergebenen Werte fest, welche Eigenschaften sortiert werden sollen?

Hintergrund:

Der folgende Code zeigt die grundlegende Verwendung von OrderBy, wobei die Eigenschaften fest codiert sind:

<code class="language-csharp">List<student> existingStudends = new List<student>{ new Student {...}, new Student {...}};
List<student> orderbyAddress = existingStudends.OrderBy(c => c.Address).ToList();</code>
Nach dem Login kopieren

Dynamische Attributspezifikation:

Um die zu sortierenden Eigenschaften dynamisch anzugeben, können Sie Reflektion nutzen, um den erforderlichen Ausdrucksbaum zu erstellen. Hier ist eine Erweiterungsmethode, die diese Funktionalität implementiert:

<code class="language-csharp">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>
Nach dem Login kopieren

wobei orderByProperty der Name der Eigenschaft ist, die Sie sortieren möchten, und desc bestimmt, ob in absteigender Reihenfolge (true) oder aufsteigender Reihenfolge (false) sortiert werden soll.

Verwendung:

Mit dieser Erweiterungsmethode können Sie jetzt dynamisch nach jedem Attribut sortieren:

<code class="language-csharp">string param = "City";
List<student> orderbyAddress = existingStudends.OrderBy("City", true).ToList(); // 按城市降序排序
List<student> orderbyName = existingStudends.OrderBy("Name", false).ToList(); // 按名称升序排序</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Sort-Eigenschaft in einer LINQ-OrderBy-Klausel dynamisch angeben?. 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