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
Barbara StreisandOriginal
2025-01-10 11:53:43639Durchsuche

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>

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>

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>

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!

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